单片机写程序C51和C52区别大吗

单片机写程序C51和C52区别大吗,第1张

C51及C52单片机在内核结构上完全一样,两者的主要差别在RAM和ROM上,C51是128byte RAM,4K ROM,C52是256Byte,8K ROM。

//程序名:闪烁的LED灯

//MCU:AT89S52

//晶振:12MHZ

#include <reg52h>//单片的头文件

sbit LED=P0^0;//led在P0_0口

//功能:延时(ms)

void _delay_ms(unsigned int x)

{

unsigned char i;

while(x--)for(i=0;i<125;i++);

}

//主函数

void main(void)

{

P0=0xff;

P1=0xff;

P2=0xff;

P3=0xff;

while(1)

{

LED=~LED;

_delay_ms(100);//LED以100ms闪烁

}

}

C51和C52的程序是可以一样的!

keil C 语言中嵌入汇编语言进行混合编程,方法如下:

1、在C 文件中要嵌入汇编代码片以如下方式加入汇编代码

#pragma ASM

; Assembler Code Here

#pragma ENDASM

2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ”

在d出的对话框中,点击右边的

“Generate Assembler SRC File”

和“Assemble SRC File”

使检查框由灰色变成黑色(有效)状态

3 、根据选择的编译模式, 把相应的库文件( 如Small 模式时, 是

Keil\C51\Lib\C51SLib)加入工程中, 该文件必须作为工程的最后文件,在默认

安装盘KEIL/C51/LIB/C51SLib

4、编译,即可生成目标代码

实例:

#include<reg52h>

#define uchar unsigned char

sbit LED1=P1^0;

//C 嵌入汇编例程

void delay_ms(void)

{

#pragma asm

MOV R0,#0FFH

MOV R1,#0FFH

D_LOOP1:

DJNZ R0,D_LOOP1

MOV R0,#0FFH

DJNZ R1,D_LOOP1

#pragma endasm

}

void main(void)

{

uchar i;

P1 = 0xFF;

while(1)

{

i++;

delay_ms();

if(i>=7)

{

LED1 =~LED1;

i=0;

}

}

}

step 1:新建一个工程

step 2:选择芯片类型(因为不同芯片包含的函数不一样)

step 3:新建空白文件,然后加入到工程里边

step 4:在空白软件中编写程序

PS:其实也可以先编写再添加,但为了防止忘了保存或者数据丢失,建议新建空文件时就加到工程里去。

你如果是想学习ARM为最终目的,那我建议你就不必要去学习单片机了,因为单片机就算你达到精通,那也对你学习ARM没有太多帮忙,当然不能说没有帮忙,至少你可以知道一个大体的硬件框架,但这要付出的时间却是很多。但以你的实际情况来看

你是从事自动监控行业的,若是你现在的工作有部分涉及到单片机和ARM,那我还是建议你先学习单片机,因为单片机也可以让你在这行业上要作得得心应手,而且单片机的学习不像ARM那样复杂,单片机你可以在一个月的时间就可以学得差不多,但对于ARM,你没有一年时间是不可能学到什么的,我就是这样过来的。单片机我玩得很顺手,然后去学ARM,才发现那东西不像单片机那么容易上手,好在我还学过DSP,这才算是有点入门帮忙。

所以ARM的学习是不能急的。

单片机的学习,我想你就不必要去学习51了,直接学习AVR,你就算学了51,但对你学习AVR没有什么帮忙,因为这两个单片机相差太多了,我想51也要快过时了。

学习avr,最好你用AVR16或8来学习,这样比较有典型。

开发板吗,我想对初学者来说,用PROTUES这个软件就是最好的开发板,你可以试试,

现在都是用c来写代码的,你以前学过,现在要再拿起应该不是难。你在网上找几个C的例子来看一看就差不多可以上手,然后自己不看,重新写一次,重要的是要自己重写一次(千万别想当然)

用CVAVR这个软件吧,它是专门对AVR的

这个上手更加容易

最后再用soureinsigth这个软件编写

SUBDATA:

    CLR C

    MOV A,41H

    SUBB A,43H

    MOV A,40H

    SUBB A,42H

    JC SUBD1

    MOV 44H,40H

    MOV 45H,41H

    MOV 46H,42H

    MOV 47H,43H

    RET

SUBD1:

    MOV 44H,42H

    MOV 45H,43H

    MOV 46H,40H

    MOV 47H,41H

    RET

#include<reg51h>

#define uchar unsigned char

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};  //0到9

uchar num,cnt,disn;

uchar keyval,disk;

uchar led[]={1,2,3,4};

void dealdat(uchar a)

{

led[0]=0;

led[1]=0;

led[2]=0;

led[3]=0;

led[a]=disk;

}

void delay(unsigned int a)

{

unsigned int i,j;

for(i=0;i<a;i++)

for(j=0;j<1000;j++);

}

void t0isr() interrupt 1

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

switch(num)

{

case 0:P2=0x01;break;

case 1:P2=0x02;break;

case 2:P2=0x04;break;

case 3:P2=0x08;break;

default:break;

}

P0=~tab[led[num]];

num++;

num&=0x03;

cnt++;

if(cnt>100)

{

cnt=0;

disn++;

disn%=4;

dealdat(disn);

}

}

uchar kbscan(void)

{

unsigned char sccode,recode;

P3=0x0f;  //发0扫描,列线输入

if ((P3 & 0x0f) != 0x0f)  //有键按下

{

// delay(20);   //延时去抖动

if ((P3&0x0f)!= 0x0f)

{

sccode = 0xef;    //逐行扫描初值

while((sccode&0x01)!=0)

{

    P3=sccode;

if((P3&0x0f)!=0x0f)

{

    recode=(P3&0x0f)|0xf0;

return((~sccode)+(~recode));

 }

        else

sccode=(sccode<<1)|0x01;

}

}

}

return 0;  //无键按下,返回0

}

void getkey(void)

{

unsigned char key;

key=kbscan();

if(key==0){keyval=0xff;return;}

switch(key)

{

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}

}

main()

{

TMOD=0x11;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{

getkey();

if(keyval!=0xff)disk=keyval;

delay(10);

}

}

以上就是关于单片机写程序C51和C52区别大吗全部的内容,包括:单片机写程序C51和C52区别大吗、在C51语言中如何嵌入汇编语言、简述keilc51从编写程序到运行程序的流程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9509247.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存