51单片机的程序移植到avr单片机应该怎样移植 注意什么问题
先要选择好编译器,C编译器如GCC,ICC,CVAVR,IAR等,看你选哪种编译器,汇编编译器如AVR Studio。
头文件不需要自己写,每种编译器有自带的头文件,你只要#include就可以了。不过要include对。
51程序(针对keil编译器)和AVR程序(上述的一些编译器,如GCC)最主要的不同:
1,因为51的io口为准双向io,所以对io口的操作不用设置io的方向,而AVR是双向io,每次对io操作,如输出输入都要对io的方向进行设置。
2,关键字不同,code是keil c51的非标准写法,如果AVR要使用常量,可以用const关键字取代。还有data关键字取消,也就是说什么data, idata,xdata,pdata都不可以使用。相对来说avr的编译器比较接近标准c。
3,51可以位操作,但是avr基本不使用位操作,因为avr可以位操作的区域比较少,所以sbit,bit什么的只有在51出现,avr不可以使用,除非你自己定义一个结构体。
4,中断的写法,这个每个编译器基本都不一样,呵呵,比如iar会使用#pragma关键字,gcc有固定的函数入口ISR(中断向量)。
avr比51强大很多,比如移植spi的程序,你可以自己写个avr的spi程序来取代,而不用像51一样io模拟。以上是我暂时能想到的比较大的区别,移植起来首先要注意的地方,如果还有疑问,你可以追问的。
单片机问题,如果一个单片机的主频是1m赫兹,那么就是1s的时间可以执行1m...
不可以这么理解,正确的是这样的:如果一个单片机的主频是1MHz,那么他的指令周期就是1us,即1MHz的倒数。而单片机从内核结构,可以分两类:复杂指令集结构类型的单片机,如51,8086,精简指令集结构的单片机,如AVR,ARM7 如果是前者:复杂指令集结构类型的计算机,那么,一条汇编语句可能是1个指令周期...
单片机中一个程序的运行过程
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行...
设单片机系统如何编写一个完整的C51程序使P1.6和P1?
2、对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。3、在程序设计过程中,要充分利用C51语言的预处理...
修改一个简单的单片机程序
让我想想 我修改了一下,把R2的赋值循环一次变小1(变少多少按你需要自己定咯,想变化快点就对这部分修改,当然,不可以用djnz咯),标星号部分是我改的 ,不懂可以HI我 ZWMADDR EQU 8002H ZXMADDR EQU 8004H ORG 0000H ST: LJMP total;ORG 0100H total:;MOV R2,#25H ;MAIN: MOV R3,#01...
单片机程序中sbitp1_1=P1^0是什么意思?
在单片机程序中,`sbit p1_1=P1^0;` 这行代码的意思是:1. `sbit` 是一个位定义指令,它用于将特定的I\/O端口的一位定义为一个可以使用的位名称。2. `p1_1` 是定义的位名称,它可以被用作该端口位的代号。3. `P1^0` 表示的是端口1的第0位,即P1.0。在`main` 函数中的代码段:1....
各位大佬,我需要一个单片机的程序代码
\/\/ 单片机的程序代码,可以增加花样。include<reg52.h> \/\/包含 reg52.h 这个头文件 include<intrins.h> define led P2\/\/ char i;char a[]={0xff,0x00,0xff,0x00,0xff,0x00,0xff,0xff }; \/\/ LED灯花样1 char b[]={0xaa,0x55,0xaa,0x55,0xaa,0x55,0xff,0xff }; \/\/ LED灯...
编一个单片机的程序,p1.3口输出一个50HZ的方波,周期0.02S,晶振是12MHZ...
include<reg51.h> include<intrins.h> sbit c0=P1^3; \/*PMW输出端口*\/ void time1_int() interrupt 1 { TH0=(65536-20000)\/256;TL0=(65536-20000)%256;c0=~c0;} void main(){ c0=0;TMOD=0x11;TH0=(65536-20000)\/256;TL0=(65536-20000)%256;EA=1;ET0=1;TR0=1;while(1){ ;...
51单片机1按键切换3种不同状态的c程序??
主程序大致是这样的 flag=0;\/\/记录按键次数 While(1){ if(key==0){delayms(20);if(key==0)flag++;}\/\/按键检测 if(flag==3)flag=0;if(flag==0){正向流水} else if(flag==1){反向流水} else {间隔流水} }存在问题,由于流水灯执行时间较长,因此对按键响应缓慢,可以在流水灯之间...
请帮解释一下单片机程序各步骤
RET ;中断子程序结束 ORG 4000H ; 伪指令 段地址开始位置为:4000H DB 10H,80H,30H,50H,30H,50H ;数据段 连续存6个16进制数。--- 大致就是这样,你再查查指令系统的具体含义,可以更准确地解释其含义,我已经有10年没编写这些程序代码了,所以有可能记忆不是太准确。
单片机程序 急求流程图 ;1、0809的片选信号CS0809接CS0。 ;2、电位...
include "reg51.h"define data_point P0 sbit EOC=P2^0;sbit ADDA=P2^1;sbit ADDB=P2^2;sbit ADDC=P2^3;sbit OE=P2^5;sbit START=P2^6;sbit CLK=P2^7;sbit ALE=P2^6;unsigned char disp[3]={0,0,0};char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,...
佟疮五苓: 如果是C语言的,有限关键字会有改变,头文件要重新写,函数的一些写法会有所改变,AVR的编译器很多,每种编译器都有自己的独特写法,要先了解编译器后在做移植,成功率会更高. 另外,先要选择好编译器,C编译器如GCC,ICC,...
吉县17154891567: 请问用在51单片机上的程序直接编程到AVR的单片机里可以吗? - ?
佟疮五苓: 不可以,连长的最像51的mega16都不可以,首先avr不可以直接位寻址.如p1.1=0;可以这么写,但不可以写pa.1=0;虽然都可以用C语言编写.AVR端口是真正的双向端口,不像51伪双向.这也是AVR的一项优势,只是操作时大家注意DDRn...
吉县17154891567: 如何将一个单片机C51程序变成适用于单片机AVR程序 - ?
佟疮五苓: c 语言什么时候都是c语言,只要你的51的不是kill的就可以了,因为kill的有一些他自己定义的变量等等,你只要把你包含的头文件改掉,还有中间使用的io口的名字改对应该就可以的!
吉县17154891567: 51单片机程序怎么改成ATmega16的 - ?
佟疮五苓: 这个是没办法改的,改动特别大.两种芯片虽然从某种层次上来说,是大部分相同的.但是也可以说是截然不同的,因为其架构不一样,一个是51,一个是AVR,最具体的体现是,寄存器、操作、和指令集都不一样.
吉县17154891567: 买的开发板是兼容51和avr的,有avr转接板,但是如何使用才能用上AVR呢?纯菜鸟. - ?
佟疮五苓: 接上转接板,把AVR单片机插上去,一般在板子上会有个51和AVR的转换插针,把它插在AVR的位置就可以,另外,复位按键一般也是各用各的.
吉县17154891567: 如何将51单片机学习板转化成avr板 - ?
佟疮五苓: 首先你的开发板要支持AVR,最主要是两者的复位电平不一样,然后可以买的转接板就可以,不支持的话你就得自已做块转接板了!
吉县17154891567: 怎么从51单片机转到avr啊 - ?
佟疮五苓: 单片机都很简单.51如果你已经学精通了,那么你学avr也不难.可以从图书馆顺便借本AVR相关的书,先熟悉寄存器,把各个模块熟悉了.然后按照书中的实验跟着做,做个一遍就会了,重要的在于多些程序,可以的话和师兄一起做点项目,参加一些比赛.你可能觉得我说得很简单,但是事实就是这样的.不一定要有人教哈,自学,然后不懂得可以去论坛上找资料,问人哈.我从51刚学完,参加飞思卡尔的比赛,直接入手xs128了.3天学会最小系统,然后开始编程写程序.可能一开始是有些麻烦,因为有很多寄存器要设置,一开始也要查书和英文文档的,但是后来熟悉就很快了.这真的是经验之谈,如果你肯付出一切都很简单的.
吉县17154891567: stm32 的程序可以直接用在avr上面么? - ?
佟疮五苓: 51比较好学,不过功能也有限,当然应付简单的应用没有问题 AVR通用性比较好,型号也比较多,但是目前价格涨的让人怕.MSP430低功耗,常用在水表电表等测量场合,当然也可以用在机电控制场合,但他只能用在3.3v,与一些5v器件相连需要考虑电平是否兼容的问题.ARM比普通单片机速度快,功能强大些,但成本也较高.现在新推出的基于ARM7内核的stm32成本较低,有替代高端单片机的潜力.而高端的ARM9、ARM11主要用于智能手机等需要运行复杂程序的场合.当然,功能越复杂,开发就越难.我觉得学习应该循序渐进,学学MSP430或者AVR,当然STM32也行,直接学高端的ARM有些拔高了
吉县17154891567: 一个单片机程序从KEIL C51 转到AVR遇到一大堆问题,大家给看看是怎么回事吧.急切求教 - ?
佟疮五苓: 其实,51和ICCavr的差异还是很多的,包括端口设置、寄存器设置等等.51可以位操作,但是ICC中不行.给你段随便设置的ICC程序,你...
吉县17154891567: 刚刚入门51单片机,但板子烧了,想学AVR - ?
佟疮五苓: 51与AVR的区别不是很大,AVR又比51高级一点.建议还是学AVR好了.我也是在学习AVR.如果你决定好了学AVR的话,在百度HI我.我可以免费且热情的提供AVR芯片的中文资料;一共十五讲的《AVR视频教程-尹延辉》;AVR的编程软件;AVR的ISP下载器DIY方案;AVR的JTAG仿真器DIY方案;AVR MEGA16的学习板原理图和洞洞板布板电子文档;还有我写的例程.哈哈哈,是不是看得流口水了,唉,擦一擦先吧.在百度HI我.