单片机培训实验入门篇汇编为主.docx
- 文档编号:17841998
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:21
- 大小:129.05KB
单片机培训实验入门篇汇编为主.docx
《单片机培训实验入门篇汇编为主.docx》由会员分享,可在线阅读,更多相关《单片机培训实验入门篇汇编为主.docx(21页珍藏版)》请在冰点文库上搜索。
单片机培训实验入门篇汇编为主
实验一使用μVision集成开发工具设计、调试汇编语言程序(2学时)
1.实验目的
1)熟悉使用μVision集成开发工具编写、编译、调试单片机汇编语言程序的方法。
2)掌握A51汇编语言的编程方法。
3)领会汇编语言程序设计的思想和方法。
2.实验设备
1)计算机
2)μVision集成开发环境
3.实验内容
1)学习μVision集成开发环境的使用及A51编程范例
结合第11章μVision集成开发环境的使用介绍,上机练习μVision的常用功能,具体功能说明请参阅第11章的有关部分和μVision自带的联机帮助。
打开μVision安装目录下路径为“C51\EXAMPLES\ASM\”中的汇编语言范例工程文件“ASAMPLE.Uv2”。
通过仔细阅读范例程序,了解μVision中项目文件的构成、汇编语言程序编写规范、模块间的函数调用方法等知识。
将打开的范例工程文件编译后,点击
进入调试模式调试程序,如图12-7所示,熟悉μVision调试模式下常用功能的使用方法。
掌握汇编语言程序调试的一般过程。
图12-7汇编范例的调试模式
2)编写程序,完成二进制数向BCD码的转换
参照11.3中介绍的内容,使用μVision集成开发环境建立项目,编写程序实现将R0中的二进制数转换成非压缩式BCD码,存储于内部数据存储器30H~31H中。
编译程序,根据提示改正错误,直至编译无误。
参照11.4中介绍的相关内容,进入μVision调试模式,在寄存器窗口中设置寄存器R0的初值,在程序最后设置断点,全速运行至断点处,在存储器观察窗口中观察内部数据存储器中的内容是否与程序设计运行结果一致。
如果有问题,需要进一步通过单步调试,查看程序的每条语句执行结束后的状态,检查程序设计中的问题。
3)编写程序,完成BCD码向ASCII码的转换
使用μVision集成开发环境建立项目,编写程序实现将存储于内部数据存储器30H~35H中的6个非压缩式BCD码的数字转换成ASCII码形式,存储于外部数据地址为2000H~2005H的单元中。
编译程序,根据提示改正错误,直至编译无误。
参照11.4中介绍的相关内容,进入μVision调试模式,在存储器观察窗口1中设置内部数据存储器30H~35H单元中的BCD码数据,在程序结尾设置断点,全速运行直至断点处,在存储器观察窗口2中查看以地址2000H起始的外部数据存储单元中的内容是否与程序设计运行结果一致。
如果有问题,需要进一步通过单步调试,查看程序的每条语句执行结束后的状态,检查程序设计中的问题。
实验二数码管跑马显示
一、实验目的
1、熟悉51单片机并行口的输入方式,输出方式的编程;
2、熟悉共阴极LED的工作特性及控制方法;
3、学习在系统烧写单片机程序(在系统编程ISP)的方法。
二、实验电路和程序
1、实验电路
一个数码管由8个发光二极管组成,由于是共阴极,所以低电平选通。
如图9.6所示,SN74ALS245A接成直通方式通过P0口驱动数码管。
由74LS138对P1口译码控制SN74ALS245A驱动6个数码管的位选,剩余两路,一路接到发光二极管,另一路控制蜂鸣器。
由程序进行选通控制。
2、程序
(1)汇编程序:
通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管继续闪亮。
通过复位按键进行复位。
图9.6实验电路图
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#00H
MOVP1,A
MOVR0,#00H
LS:
MOVA,R0
MOVDPTR,#TAB0
MOVCA,@A+DPTR
MOVP1,A;数码管位选跑马
MOVA,R0
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP0,A;数码管数字显示
INCR0
ACALLDELAY
MOVP1,#0E0H
ACALLDELAY
SJMPLS
DELAY:
MOVR5,#08H;延时
DELAY1:
MOVR6,#0FAH
DELAY2:
MOVR7,#0FAH
DJNZR7,$
DJNZR6,DELAY2
DJNZR5,DELAY1
RET
TAB0:
DB00H,20H,40H,60H,80H,0A0H,00H,20H,40H,60H
DB80H,0A0H,00H,20H,40H,60H,80H,0A0H,00H,20H
TAB1:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
END
(2)C语言程序:
通过程序控制使数码管进行从0到9的跑马显示和0.到9.的跑马显示,两个数字显示的间隙发光二极管发光,当跑马显示完毕后,发光二极管长亮。
通过复位按键进行复位。
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uinta[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uintb[20]={0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20,0x40,0x60,
0x80,0xa0,0x00,0x20,0x40,0x60,0x80,0xa0,0x00,0x20};
voiddelay(uintcount)/*延时子程序*/
{
uinti;
while(count--!
=0)
{
for(i=0;i<72;i++);
}
}
main()
{
uintj;
for(j=0;j<20;j++)
{
P0=a[j];/*数字显示*/
P1=b[j];/*数码管跑马*/
delay(1000);/*延时*/
P1=0xe0;
delay(1000);/*延时*/
}
P1=0xe0;
}
(3)自编程序:
编程并烧写程序,6个数码管依次显示6,5,2,3,0.,9;然后,6个数码管同时点亮,显示65230.9。
再编一个小程序,在五个数码管上显示“HELLO”。
三、编写程序并在实验板上执行通过
1、数码管跑马显示0~9,0.~9.,测试数码管性能;
2、数码管依次显示6,5,2,3,0.,9,由于数码管位选决定每次只有一个数码管点亮,所以利用视觉误差使6个数码管同时点亮,显示65230.9;
3、自编数码管段代码,用数码管显示英文“HELLO”;
4、复位按键复位,重复执行。
实验三行列按键显示
一、实验目的
1、熟悉行列按键的定位方法;
2、进一步学习在系统编程(ISP)的方法。
二、实验电路
实验电路图如图9.7所示,按键信号由P2口进行识别,通过对按键坐标的判断来定义数码管的显示位和显示内容。
图9.7实验电路图
三、实验程序
16个按键按照从左至右,从上至下的顺序排列,操作时分别显示0,1,2,3,4,5,6,7,8,9,0.,1.,2.,3.,4.,8.;其中后六位分别代表A,B,C,D,E,F,复位键复位。
1、汇编程序:
KEYBUFEQU30H
ORG0000H
LJMPLS0
ORG0030H
LS0:
MOVP2,#0FH;判断纵坐标
MOVR1,#0FH
AJMPSKH
SKH:
MOVA,P2
ANLA,R1
XRLA,R1
MOVR0,A
CJNEA,#0FH,LS1
ACALLSKH
LS1:
MOVP2,#0F0H;判断行坐标
MOVR2,#0F0H
AJMPSKL
SKL:
MOVA,P2
ANLA,R2
XRLA,R2
MOVR6,A
CJNEA,#0F0H,KEY0
ACALLSKL
KEY0:
MOVA,R6;判断如果是第一个按键操作,则显示偏移量为0
ADDA,R0
CJNEA,#11H,KEY1
MOVKEYBUF,#0
LJMPUK
KEY1:
MOVA,R6;判断如果是第二个按键操作,则显示偏移量为1
;依次类推
ADDA,R0
CJNEA,#21H,KEY2
MOVKEYBUF,#1
LJMPUK
KEY2:
MOVA,R6
ADDA,R0
CJNEA,#41H,KEY3
MOVKEYBUF,#2
LJMPUK
KEY3:
MOVA,R6
ADDA,R0
CJNEA,#81H,KEY4
MOVKEYBUF,#3
LJMPUK
KEY4:
MOVA,R6
ADDA,R0
CJNEA,#12H,KEY5
MOVKEYBUF,#4
LJMPUK
KEY5:
MOVA,R6
ADDA,R0
CJNEA,#22H,KEY6
MOVKEYBUF,#5
LJMPUK
KEY6:
MOVA,R6
ADDA,R0
CJNEA,#42H,KEY7
MOVKEYBUF,#6
LJMPUK
KEY7:
MOVA,R6
ADDA,R0
CJNEA,#82H,KEY8
MOVKEYBUF,#7
LJMPUK
KEY8:
MOVA,R6
ADDA,R0
CJNEA,#14H,KEY9
MOVKEYBUF,#8
LJMPUK
KEY9:
MOVA,R6
ADDA,R0
CJNEA,#24H,KEY10
MOVKEYBUF,#9
LJMPUK
KEY10:
MOVA,R6
ADDA,R0
CJNEA,#44H,KEY11
MOVKEYBUF,#10
LJMPUK
KEY11:
MOVA,R6
ADDA,R0
CJNEA,#84H,KEY12
MOVKEYBUF,#11
LJMPUK
KEY12:
MOVA,R6
ADDA,R0
CJNEA,#18H,KEY13
MOVKEYBUF,#12
LJMPUK
KEY13:
MOVA,R6
ADDA,R0
CJNEA,#28H,KEY14
MOVKEYBUF,#13
LJMPUK
KEY14:
MOVA,R6
ADDA,R0
CJNEA,#48H,KEY15
MOVKEYBUF,#14
LJMPUK
KEY15:
MOVA,R6
ADDA,R0
CJNEA,#88H,KEY16
MOVKEYBUF,#15
LJMPUK
KEY16:
LJMPLS0
UK:
MOVA,KEYBUF;数码显示模块
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVP1,A
LCALLDELAY
MOVA,KEYBUF
MOVDPTR,#TAB0
MOVCA,@A+DPTR
MOVP0,A
LCALLDL10MS
LJMPLS0
DELAY:
MOVR2,#0FEH
DELAY1:
DJNZR2,DELAY1
RET
DL10MS:
MOVR3,#14H
DL10MS1:
LCALLDELAY
DJNZR3,DL10MS1
RET
TAB1:
DB00H,20H,40H,60H,80H,0A0H,00H,20H
DB40H,60H,80H,0A0H,00H,20H,40H,60H
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,0BFH,86H,0DBH,0CFH,0E6H,0FFH
END
2、C语言程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uchara[4][4]={{0x00,0x20,0x40,0x60},{0x80,0xa0,0x00,0x20},
{0x40,0x60,0x80,0xa0},{0x00,0x20,0x40,0x60}};
ucharb[4][4]={{0x3f,0x06,0x5b,0x4f},{0x66,0x6d,0x7d,0x07},
{0x7f,0x6f,0xbf,0x86},{0xdb,0xcf,0xe6,0xff}};
ucharrnum,lnum;
voiddelay(uintcount)/*延时*/
{
uchart;
while(count--!
=0)
{
for(t=0;t<72;t++);
}
}
ucharkeysacn(void)
{
P2=0x0f;/*确定按键列*/
if((P2&0x0f)!
=0x0f)
{
delay(5);
if((P2&0x0f)!
=0x0f)
{
if(P2==0x0e)
rnum=1;
if(P2==0x0d)
rnum=2;
if(P2==0x0b)
rnum=3;
if(P2==0x07)
rnum=4;
}
P2=0xf0;/*确定按键行*/
if((P2&0xf0)!
=0xf0)
{
if(P2==0xe0)
lnum=1;
if(P2==0xd0)
lnum=2;
if(P2==0xb0)
lnum=3;
if(P2==0x70)
lnum=4;
}
P0=b[rnum-1][lnum-1];
P1=a[rnum-1][lnum-1];
delay(1000);
}
}
main()
{
while
(1)
{
keysacn();
}
}
3、自编程序
编程并烧写程序,按键1按下,数码管显示65230.9,数码管2按下显示“HELLO”。
四、编写程序并在实验板上执行通过
1、调试已有程序,实现按键操作与数码管显示的对应;
2、按键1操作,显示6523.9;按键2操作,显示“HELLO”;
3、复位,重复操作。
实验四中断
一、实验目的
了解中断的产生及影响过程,掌握中断程序的编制。
二、实验连线
用短接块将JP2的3、4脚相连(即连向INT0方向),RS触发器(消抖电路)向单片机的外部中断INT0引脚提供中断所需的脉冲,每按两次开关S2,电平变反一次,产生一个跳变沿,作为外部中断INT0的中断请求信号。
实验电路如图9.8所示。
图9.8实验电路图
三、实验程序
记录并显示INT0的中断次数,在数码管中显示出来,即每产生一次中断,显示加一。
中断次数不超过16次
1、汇编程序
ORG0000H
AJMPNT
ORG0003H
AJMPINT0R
NT:
MOVIE,#81H;允许INT0中断,置EA=1
SETBIT0;边沿触发中断
MOVR0,#00H;计数初值为0
BIO:
MOVP1,#0A0H;第6个数码管显示终端次数
MOVDPTR,#TAB0;字形码表送至DPTR
MOVA,R0
MOVCA,@A+DPTR;查表
MOVP0,A;显示
SJMP$;等待中断
INT0R:
INCR0
CJNER0,#10H,RET0;中断是否满15次
MOVR0,#00H;循环
RET0:
POPDPH
POPDPL
MOVDPTR,#BIO
PUSHDPL;修改终端返回值
PUSHDPH
RETI
TAB0:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,0BFH,0DBH,0CFH,0E6H,0EDH,0FFH
END
2、C语言程序
#include
Unsignedchara[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xff};
chari;
voidint_0(void)interrupt0using1
{
i++;/*计中断次数*/
if(i<16)/*当i<16,等待中断*/
P0=a[i];/*查表,次数送显示*/
else/*当i=16,重复下一轮16次中断*/
{
i=0;
P0=0x3f;
}
}
main()
{
EA=1;
EX0=1;
IT0=1;
P1=0xa0;
while
(1);/*等待中断*/
}
3、自编程序
(1)1个数码管8段全部显示,即“8.”,中断一次,8段全灭,每中断一次,变反一次。
(2)要求同上,每中断一次,变反四次。
四、编写程序并调试通过
1、调试已有程序,编写调试自编程序;
2、使用六个数码管显示H,每中断一次,H左移一次;
3、复位键复位,重复操作。
实验五定时/计数器
一、实验目的
了解定时/计数器的应用,掌握其应用编程方法。
二、实验连接
用短接块将JP2的1、2脚相连,脉冲向单片机的定时/计数器0提供外部技术脉冲,每按两次开关S2,电平变反一次,产生一个跳变沿。
实验电路如实验3图9.8所示。
三、实验程序
制作1s定时器,由于1s远大于单片机的最大定时时间,所以我们采用50ms*20=1000ms的方式来设计,首先我们用定时器0设计一个50ms的定时器,再将其循环20次来实现。
我们的晶振频率为11.0592,由公式可算出50ms的计数初值为4C00H。
当一秒定时时间到时,数码管显1,再进行1s定时,定时到数码管显示2,以此类推,循环16次结束。
1、汇编程序
ORG0000H
LJMPSTART
ORG0030H
START:
MOVA,#00H
MOVP1,A
MOVR0,#00H
LOOP:
MOVA,R0
MOVDPTR,#TAB0
MOVCA,@A+DPTR
MOVP0,A
ACALLDELAY
INCR0
SJMPLOOP
DELAY:
MOVR1,#19H;循环20次
MOVTMOD,#01H;定时器工作方式
SETBTR0;启动定时器0
AGAIN:
MOVTL0,#00H;定时器赋初值
MOVTH0,#4CH
LOOP1:
JBCTF0,LOOP2
JMPLOOP1
LOOP2:
DJNZR1,AGAIN
CLRTR0
RET
TAB0:
DB06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FFH
END
2、C语言程序
#defineuintunsignedint
uinta[16]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xff};
inti=0,j=19;
voidmain()
{
while(i!
=16)/*循环显示16次*/
{
for(j=19;j>=0;j--)/*定时循环20次*/
{
TMOD=0x01;/*定时器0工作方式*/
TH0=0x4C;/*定时器赋初值*/
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
while(TF0==0);
TF0=0;
}
P1=0xa0;
P0=a[i];
i++;
}
}
3、自编程序
采用计数器0对外部计数脉冲计数,首先,计8个脉冲,8个脉冲计数完成后,启动数码显示英文“HELLO”。
四、编写程序并调试通过
1、完成1s定时程序的调试和运行,观察其功能实现原理;
2、编译并烧写自编程序,实现8个脉冲的计数,并显示“HELLO”字符
3、(选作)扩展,自行设计电子钟,时、分、秒在数码管中显示出来。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 培训 实验 入门 汇编 为主
![提示](https://static.bingdoc.com/images/bang_tan.gif)