版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28877125/article/details/84839739
第一个程序的基本流程
1、时钟初始化、看门狗配置
注意:对于用C语言或汇编语言开发的程序,程序的第一行“必须设置”CKCON=0x70,然后设置CLKSEL=0x07~ 0x00,CLKMD=0x69,CKCON=0x00 ~ 0x70,这个优先级不能修改
为了节能的目的,微控制器内置三种不同的运行模式:
- 正常模式:正常模式是指CPU和外围功能正常运行,系统时钟基于源选择、时钟分频器和程序存储器等待状态的组合
- IDLE模式:IDLE模式是暂时暂停CPU时钟及其执行的情况,但它仍然处于危险状态。EALL的功能(例如定时器、PWM、SPI、UART和I2C)
- STOP模式:STOP模式禁用所有函数和时钟生成器,直到唤醒信号返回正常模式
微控制器包括片上时钟发生器(IHC 32 MHz)。重置和电源接通控制器在电源接通序列期间自动加载时钟源选择配置。因此,所选择的时钟源被视为“fosc”域,在任何时候都是固定频率。
随后,选择时钟源(fosc)除以1-128次,由CLKSEL寄存器控制。CPU输入分割的时钟作为其操作基础(命名为fcpu)。当CLKCMD寄存器被写入0x69时,应用CLKSEL的设置。
CLKSEL (fosc=32M) | fcpu |
---|---|
000 : (0x00) | fosc/128 |
001 : (0x01) | fosc/64 |
010 : (0x02) | fosc/32 |
011 : (0x03) | fosc/16 |
100 : (0x04) | fosc/8 |
101 : (0x05) | fosc/4 |
110 : (0x06) | fosc/2 |
111 : (0x07) | fosc/1 |
CKCON = 0x70; // From = 8M
CLKSEL = 0x07; // Fcpu = 32M/1
CLKCMD = 0x69; // Clock switch start
WDTR = 0x5A; // 如果看门狗使能了就清空看门狗
void main(void)
{
uint8_t tmp;
CKCON = 0x70; // From = 8M
CLKSEL = 0x07; // Fcpu = 32M/1
CLKCMD = 0x69; // Clock switch start
WDTR = 0x5A; // 如果看门狗使能了就清空看门狗
P0 = 0x20; // UTX pin set high
P0M = 0x20; // UTX is output, URX is input
P0UR = 0xFF;
P1 = 0;
P1M = 0;
P1UR = 0xFF;
P2 = 0;
P2M = 0;
P2UR = 0xFF;
UART_Init();
UART_WriteOneByte('1');
while (1)
{
WDTR = 0x5A; // clear watchdog if watchdog enable
// UART_WriteOneByte(0X33);
if(u8RxBufLength1!=u8RxBufLength) //Èç¹ûÊÕµ½Êý¾Ý
{
tmp=u8RxBuf[u8RxBufLength1++]; //·¢ËÍÊÕµ½µÄÊý¾Ý
UART_WriteOneByte(tmp);
if (u8RxBufLength1 >= BufSize) //È¡Ö¸Õ볬¹ýÉ趨ֵ£¬´Ó0¿ªÊ¼È¡Êý¾Ý£¬Ö¸Ïò0
{
u8RxBufLength1 = 0;
}
}
}
}