永发信息网

C51程序转为AVR程序如何考虑时间参数

答案:1  悬赏:60  手机版
解决时间 2021-04-04 04:18
  • 提问者网友:且恨且铭记
  • 2021-04-03 16:59
C51程序转为AVR程序如何考虑时间参数
最佳答案
  • 五星知识达人网友:神的生死簿
  • 2021-04-03 17:39
如果是C语言的,有限关键字会有改变,头文件要重新写,函数的一些写法会有所改变,AVR的编译器很多,每种编译器都有自己的独特写法,要先了解编译器后在做移植,成功率会更高。 另外,先要选择好编译器,C编译器如GCC,ICC,CVAVR,IAR等,看自己选哪种编译器,汇编编译器如AVR Studio。
头文件不需要自己写,每种编译器有自带的头文件,只要#include就可以了,不过要include对。
51单片机(包括STC的)程序移植到AVR平台上需要注意事项
1) 头文件, 寄存器名,寄存器设置代码都是要相应修改的。
2) IO端口的位操作要做相应的调整。
3) 中断服务函数的格式也有不同,需做相应调整 。
4) 51单片机的端口寄存器复位值为1,因此作为输出端口时,即使程序中不作设置,也会输出高电平, 而AVR单片机中端口寄存 器PORTX 复位值为0, 因此51单片机的程序移植到avr单片机中时一定要注意端口初始化代码, 假设51程序中没有进行初始化,那么端口默认为高, 到了avr中,如果照搬原来的程序,端口就变成低电平,可能导致系统不能正常运行,而且不好查出来问题.
5) 由于两者对于长字节数据存放的方式不同,从地址到高地址, 51平台上依次存放高字节和低字节, AVR上依次存低字节和高字节, 所以如果程序中涉及到采用联合体或是依次访问内存地址的方法对长字节数据进行分离的话,就要注意低地址里读取的是高字节还是低字节了。比如: union UNI_2BYTE {uint dat; uchar tab[2]; }wdat;
在这个联合体wdat中, 成员dat是个占2个字节长度的整形数, 那么wdat.tab[0]表示dat的低地址的那一个字节,如果是在keil c中, 由于规定低地址存放高字节, 那么wdat.tab[0]就是dat的高字节; 如果是在IARAVR或者ICCAVR中,由于低地址存放低字节, 那么wdat.tab[0]就是dat的低字节。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯