当前位置:首页 > 盛群单片机集成开发环境使用简介
移位的方法为好,因为左移只需要MPU执行一条机器指令即可,而用乘2的方法则需要MCU执行更多的机器指令,对没有乘法指令的MCU而言,需要调用一个乘法子程序来实现乘法的功能,即使对有乘法指令的MCU,其执行乘法指令的速度一般要慢于执行
移位指令。
需要注意的是,C语言没有循环移位运算符,PA是个8为字长的寄存器,当PA=0x80时,再次移位或乘2后PA=0。这时全部的LED都熄灭了。 所以程序中要加以处理,处理的方法是,若PA=0,则令PA=0x01;
3.编写程序 #include\包含HT66F50头文件,这个文件定义了MCU所有的寄存器 #defineLedPort_pa//pa端口 #defineLedPortCtrl_pac//pa控制端口 #pragmavectorisr_4@0x4 #pragmavectorisr_8@0x8 #pragmavectorisr_c@0xc //ISRforsafequard voidisr_4(){}//external voidisr_8(){}//timer/event
voidisr_c(){}
这里将中断服务程序定义为空函数。若有中断发生,程序不作
-来源网络,仅供个人学习参考
处理直接返回,若没有这些空函数,当发生中断时,MCU的程序
计数器会崩溃。 //initializeregistersfor voidsafeguard_init(){
_pac=0xff; _pbc=0xff; _pcc=0xff; _pdc=0xff; } 上电复位时,所有的IO口为输入状态,保证系统安全
voidmain(void)//主函数 { unsignedchark; safeguard_init(); _papu=0xff;//PA口弱上拉 LedPortCtrl=0;//设定pa端口为输出 LedPort=0xff;//熄灭所有LED _cp0c=0;//不使用比较器0 _cp1c=0;//不使用比较器1 _acerl=0;//不使用AD转换器 _tmpc0=0;//不使用定时器0的复用引脚 _tmpc1=0;//不使用定时器1的复用引脚 -来源网络,仅供个人学习参考
k=1;
while(1)//程序为一个无限循环
{ LedPort =k;
_delay(25000);//延迟500毫秒(ms)
_delay(25000); _delay(25000); _delay(25000); _delay(25000); k=k*2; if(k==0) k=1; } } 未完待续 -来源网络,仅供个人学习参考
共分享92篇相关文档