考考你:单片机C编程中的注意点
如果你是高手,则可能不会遇上这样的小问题,所以你就不用浪费时间来看下面贴子了。 以下是用定时器等待端口状态的二个函数,等待某端口低电平,若超时则返回。 请看完程序后,选择一个你认为较好或正确的程序,并说明原因。 硬件环境:M8,8MHz 程序1: u8 test_delay_1(u8 bit) { //设置16位计数器(T/C1)为普通模式 TCCR1A = 0x00; //预分频,0x02=0000010,8分频,最大延时约65ms, TCNT1 = 0xFFFF - 10000; //可调节延时时间 TCCR1B = 0x02; do { if((TEST_PIN & (1<<bit)) == 0) //等待端口为低电平 { TCCR1B = 0x00; return !0; } }while(TCNT1); //停止计时器 TCCR1B = 0x00; return 0; //超时返回 }
程序2: u8 test_delay_2(u8 bit) { //设置16位计数器(T/C1)为普通模式 TCCR1A = 0x00; //预分频,0x02=0000010,8分频,最大延时约65ms, TCNT1 = 0; TCCR1B = 0x02; do { if((TEST_PIN & (1<<bit)) == 0) //等待端口为低电平 { TCCR1B = 0x00; return !0; } }while(TCNT1 < 10000); //可调节延时时间 //停止计时器 TCCR1B = 0x00; return 0; //超时返回 }
|