南昌大学单片机
- 格式:doc
- 大小:63.00 KB
- 文档页数:5
南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合⃞设计⃞创新实验日期:2019.4.9 实验成绩:实验一单片机软件实验(一)实验目的1.掌握51单片机keil软件集成开发环境,能够使用汇编语言编写应用程序。
2.掌握使用集成开发环境Keil进行单片机程序开发的方法3.掌握使用集成开发环境Keil进行单片机程序跟踪调试的方法。
(二)设计要求熟悉51单片机的keil软件集成开发环境,使用汇编语言编写“1+2+3+…+100”的程序。
(三)实验原理KeilC51软件使用:在KeilC51集成开发环境下,建立一个工程并编辑源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。
(四)实验设备PC机,Keil C51集成开发环境。
(五)实验结果对汇编程序进行编译、链接、调试,在Keil C51软件中运行仿真结果如下图所示,由于“1+2+……100”运行结果超过8位二进制所能表示的范围,计算结果将存放于两个8位工作寄存器单元R2、R3中。
其中,低八位存放于R2中,高八位存放于R3中,R4中存放计算数。
下图中的寄存器窗口中可以显示计算结果为0x13ba。
调出存储器窗口Memory:选择菜单命令View →Memory Window →Memory 1:可见计算结果存放于当前工作寄存器R2(02H)与R3(03H)中,为0x13BA。
(六)结果讨论与心得体会第一次使用Keil C51软件,初步了解了软件:Keil uVision4的使用方法,初步了解了Keil软件中程序的编辑,新工程的建立运行,初步对单片机实验进行了解,加强了实验动手操作能力。
第一次尝试单步调试,能观察到内存中每一个单元的变化,感到单片机系统复杂中的严谨,收获颇丰。
(七)附录:实验源代码实验源代码如下:ORG 0000HLJMP MAINORG 0050H MAIN:MOV R2,#00HMOV R3,#00HMOV R4,#64HMOV A,#00HCLR C LOOP:MOV A,R2ADD A,R4MOV R2,AMOV A,#00HADDC A,R3MOV R3,ADJNZ R4,LOOPSJMP $END。
南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合⃞设计⃞创新实验日期:2019. 4.30 实验成绩:实验四外部中断实验(一)实验目的1.掌握单片机外部中断原理;2.掌握数码管动态显示原理。
(二)设计要求1.使用外部中断0和外部中断1;2.在动态数码管上显示中断0次数,中断1用作次数清0,数码管采用74HC595驱动。
(三)实验原理1.中断:计算机执行主程序过程中,由于临时重要事件,需要暂停当前程序的运行,转到中断服务程序去处理临时事件,处理完后又返回原程序的断点处继续运行。
图1STC15单片机的中断系统包含21个中断源,2个中断优先级,二级中断服务嵌套,中断允许寄存器IE、IE2和INT_CLKO控制中断允许。
中断优先级寄存器IP、IP2管理中断优先级。
同优先级中断同时提出中断请求时,由内部的查询逻辑确定响应次序。
中断请求源中的外部中断0(INT0)和外部中断1(INT1)详述如下:1)外部中断0(INT0):中断信号由P3.2引脚输入。
通过IT0来设置中断请求的触发方式。
当IT0为“1”时,外部中断0为下降沿触发;当IT0为“0”时,无论是上升沿还是下降沿,都会引发外部中断0.一旦输入信号有效,则置位IE0标志,向CPU申请终端。
2)外部中断1(INT1):中断信号由P3.3引脚输入。
通过IT1来设置中断请求的触发方式。
当IT1为“1”时,外部中断0为下降沿触发;当IT1为“0”时,无论是上升沿还是下降沿,都会引发外部中断0.一旦输入信号有效,则置位IE0标志,向CPU申请终端。
2.LED数码管是显示数字和字母的常见显示器件,由8个发光二极管构成,结构如图2:图2段码:a、b、c、d、e、f、g、dp段的二进制代码(a为最低位),控制显示字型。
位选:公共端com,控制数码管是否显示。
3.数码管动态显示原理:任何时刻只有一个数码管处于显示状态,单片机采用“扫描”方式控制各个数码管轮流显示,通常将所有数码管段码线的相应段并联在一起,由一个8位I/O 端口控制。
ORG 0000H0000 020030 LJMP MAINORG 0003H ;外部中断0入口0003 020060 LJMP PAN2ORG 0030HMAIN:0030 D2AF SETB EA ;打开中断总允许0032 D2A8 SETB EX0 ;打开外部中断0允许0034 7590F6 MOV P1,#0F6H ;给键盘赋初值0037 7C1E MOV R4,#30 ;设置t0延时次数,即任务中延;时1.5s的功能选择,因为定时器;最多计时65536us,所以需要多次计时累计0039 758C3C MOV TH0,#3CH ;t0赋初值003C 758AB0 MOV TL0,#0B0H003F 758901 MOV TMOD,#01H ;设置t0工作方式为方式10042 D288 SETB IT0 ;打开中断0;学号滚动显示程序0044 900172 XUEHAO: MOV DPTR,#XTAB0047 7A05 MOV R2,#5 ;从上到下滚动分四次,另加一次黑屏0049 7B06 XUEHAO2:MOV R3,#6 ;每次发送6个显示码进数码管004B 7400 XUEHAO1:MOV A,#0 ;A清零004D 93 MOVC A,@A+DPTR ;查表,给A赋值004E F599 MOV SBUF,A ;将A中数据发送到串行口0050 3099FD JNB TI,$ ;判断串行口发送是否完毕0053 C299 CLR TI ;清除中断标志位,准备进行下一次发送0055 A3 INC DPTR ;DPTR加1,指向下一个字型码地址0056 DBF3 DJNZ R3,XUEHAO1 ;判断是否到了6个0058 120134 LCALL DELAY1S ;延迟1s,进行显示005B DAEC DJNZ R2,XUEHAO2 ;判断从下滚动三次是否完毕005D 020044 LJMP XUEHAO ;新一轮显示;键盘程序0060 F570 PAN2: MOV 70H,A ;响应中断,保存原数据,保护现场0062 858271 MOV 71H,DPL0065 858372 MOV 72H,DPH0068 8B73 MOV 73H,R3006A 8A74 MOV 74H,R2006C 8D75 MOV 75H,R5006E 8E76 MOV 76H,R60070 8F77 MOV 77H,R70072 12014D LCALL DELAY10MS ;延时10MS判断按键是否按下,没按下则返回0075 20B24B JB P3.2,PAN10078 900190 MOV DPTR,#STAB ;键值显示表地址送给DPTR007B 120121 LCALL JIANZHI ;调用判断键值的程序007E F57A MOV 7AH,A ;将键值保存到7AH中0080 93 MOVC A,@A+DPTR ;查表给A赋值0081 7F06 MOV R7,#6 ;发送6次键值0083 F599 PAN: MOV SBUF,A ;将键值通过串行口发送至显示屏0085 3099FD JNB TI,$0088 C299 CLR TI008A DFF7 DJNZ R7,PAN ;判断是否发送完毕;长按键判断开始008C 7590F6 SELECT: MOV P1,#0F6H ;给键盘赋初值008F 20B244 JB P3.2,SELECTOUT ;判断按键是否按下,没有则跳出中断0092 120145 LCALL DELAY50MS ;延时50ms0095 7590F6 MOV P1,#0F6H ;给键盘赋初值0098 20B23B JB P3.2,SELECTOUT ; 判断按键是否按下,没有跳出中断009B DCEF DJNZ R4,SELECT ;判断按键是否按了1.5s,没有则跳出中断009D 7590F6 PAN4: MOV P1,#0F6H ;按键超1.5s后,等待按键弹起00A0 20B2FA JB P3.2 ,PAN400A3 7590F6 MOV P1,#0F6H ;给键盘赋初值00A6 E57A MOV A,7AH ;取出7AH中的键值00A8 B40006 CJNE A,#0,SELECT1 ;判断是不是按了按键0,不是的话继续判断00AB 120156 LCALL XUEHAOCHANG ;确定是按键0,调用学号显示功能00AE 0200EE LJMP SELECTOUT1 ; 完成功能,跳到中断返回程序00B1 B40206 SELECT1: CJNE A,#2,SELECT2 ;判断是否是按键2,不是的话继续判断00B4 12011E LCALL ATOD ;确定是按键2,调用AD功能子程序00B7 0200EE LJMP SELECTOUT1 ;完成功能,跳到中断返回程序00BA B40331 SELECT2: CJNE A,#3,SELECTOUT1 ;判断是否是按键3,不是跳中断返回程序00BD 120106 LCALL D2A ;确定是按键3,调用DA功能子程序00C0 0200EE LJMP SELECTOUT1 ;完成功能,跳到中断返回程序00C3 E570 PAN1:MOV A,70H ;按键没按下返回程序,取出中断前的数据,恢复现场00C5 857182 MOV DPL,71H00C8 857283 MOV DPH,72H00CB AB73 MOV R3,73H00CD 8A74 MOV 74H,R200CF 8D75 MOV 75H,R500D1 8E76 MOV 76H,R600D3 8F77 MOV 77H,R700D5 32 RETI00D6 12013C SELECTOUT:LCALL DELAY0A5MS ;按键按下但时间不到1.5s的中断返回程序,恢复现场00D9 7C1E MOV R4,#30 ;R4重新赋初值00DB E570 MOV A,70H00DD 857182 MOV DPL,71H00E0 857283 MOV DPH,72H00E3 AB73 MOV R3,73H00E5 8A74 MOV 74H,R200E7 8D75 MOV 75H,R500E9 8E76 MOV 76H,R600EB 8F77 MOV 77H,R700ED 32 RETI00EE 7590F6 SELECTOUT1:MOV P1,#0F6H ;按键按下达到1.5s的中断返回程序00F1 7C1E MOV R4,#30 ; R4重新赋初值00F3 E570 MOV A,70H ;恢复现场00F5 857182 MOV DPL,71H00F8 857283 MOV DPH,72H00FB AB73 MOV R3,73H00FD 8A74 MOV 74H,R200FF 8D75 MOV 75H,R50101 8E76 MOV 76H,R60103 8F77 MOV 77H,R70105 32 RETI;DA转换程序0106 F566 D2A:MOV 66H ,A ; 将A中的值保存到66H中0108 907FFF MOV DPTR,#07FFFH ; 启动DA转换器010B 7400 MOV A,#00H ;将A清零010D 7AE8 MOV R2,#1000 ; 发送1000个三角波010F F0 UP:MOVX @DPTR,A0110 04 INC A ;使A自加10111 B4E8FB CJNE A,#1000,UP ;三角波的上升沿,时间控制5ms;(因三角波频率为100Hz,故周期为10ms,则上升沿和;下降沿分别为5ms)0114 14 DOWN:DEC A ;使A自减10115 F0 MOVX @DPTR ,A0116 B400FB CJNE A,#0,DOWN ; 三角波的下降沿,时间控制5ms 0119 DAF4 DJNZ R2,UP ; 判断发送1000个是否完毕011B E566 MOV A,66H ; 取出保存到66H的A值011D 22 RET; AD转换程序011E 7590F6 ATOD: MOV P1,#0F6H ;预留AD转换程序入口;键值判断程序0121 7800 JIANZHI: MOV R0,#0 ;将R0清零0123 7400 MOV A,#0 ;将A清零0125 309402 JNB P1.4,JP1 ;判断P1.4是否为0,若为0则跳转,; 说明按下了0或2若为1则顺序执行,说明按下了1或30128 7801 MOV R0,#1 ;将值0赋给R0012A 7590C7 JP1:MOV P1,#0C7H ;给键盘赋值C7H012D 309002 JNB P1.0,JP2 ;判断P1.0是否为0,若为零则跳转,; 证明按了0或1,若仍为1则顺序执行,; 证明按下了2或30130 7402 MOV A,#2 ;将值2赋给A0132 28 JP2:ADD A,R0 ;将A于R0中值相加得到键值0133 22 RET;延时一秒的程序0134 7D64 DELAY1S: MOV R5,#1000136 12014D DELAY1S1: LCALL DELAY10MS0139 DDFB DJNZ R5,DELAY1S1013B 22 RET;延时0.5ms的程序013C 7E05 DELAY0A5MS: MOV R6,#5013E 7F31 DELAY0A5MS1:MOV R7,#490140 DFFE DJNZ R7,$0142 DEFA DJNZ R6,DELAY0A5MS10144 22 RET;延时50ms的程序0145 7D05 DELAY50MS: MOV R5,#50147 12014D DELAY50MS1: LCALL DELAY10MS014A DDFB DJNZ R5,DELAY50MS1014C 22 RET;延时10ms子程序014D 7E14 DELAY10MS: MOV R6,#20014F 7FFA DELAY10MS1:MOV R7,#2500151 DFFE DJNZ R7,$0153 DEFA DJNZ R6,DELAY10MS10155 22 RET;延时超1.5s的学号显示程序0156 90016C XUEHAOCHANG:MOV DPTR,#XTABCHANG0159 7B06 XUEHAOCHANG2:MOV R3,#6 ;串行口发送六次数据015B 7400 XUEHAOCHANG1:MOV A,#0 ;将A清零015D 93 MOVC A,@A+DPTR ;查表得A值015E F599 MOV SBUF,A ;将A中数据通过串行口发送0160 3099FD JNB TI,$0163 C299 CLR TI0165 A3 INC DPTR0166 DBF3 DJNZ R3, XUEHAOCHANG1 ;判断六次数据是否发送完毕0168 120134 LCALL DELAY1S016B 22 RET016C 8082C0016F B0F999 XTABCHANG: DB 80H,82H,0C0H,0B0H,0F9H,99H ;长按键盘时学号显示数字表0172 FEFEFE0175 FEFFFF XTAB: DB 0FEH,0FEH,0FEH,0FEH,0FFH,0FFH ;学号滚动显示数字表0178 9C9C9D017B BCFDFC DB 9CH,9CH,9DH,0BCH,0FDH,0FCH017E 8082C00181 B0F999 DB 80H,82H,0C0H,0B0H,0F9H,99H0184 A3AFAB0187 B3FBE3 DB 0A3H,0AFH,0ABH,0B3H,0FBH,0E3H018A FFFFFF018D FFFFFF DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH0190 C0F9A40193 B0 STAB:DB 0C0H,0F9H,0A4H,0B0H ;键值显示表符号值类型AC = 00D6H CONST 常量ACC = 00E0H CONST 常量ATOD = 011EH CODE 标号B = 00F0H CONST 常量CY = 00D7H CONST 常量D2A = 0106H CODE 标号DELAY0A5MS = 013CH CODE 标号DELAY0A5MS1 = 013EH CODE 标号DELAY10MS = 014DH CODE 标号DELAY10MS1 = 014FH CODE 标号DELAY1S = 0134H CODE 标号DELAY1S1 = 0136H CODE 标号DELAY50MS = 0145H CODE 标号DELAY50MS1 = 0147H CODE 标号DOWN = 0114H CODE 标号DPH = 0083H CONST 常量DPL = 0082H CONST 常量EA = 00AFH CONST 常量ES = 00ACH CONST 常量ET0 = 00A9H CONST 常量ET1 = 00ABH CONST 常量EX0 = 00A8H CONST 常量EX1 = 00AAH CONST 常量F0 = 00D5H CONST 常量F1 = 00D1H CONST 常量IE = 00A8H CONST 常量IE0 = 0089H CONST 常量IE1 = 008BH CONST 常量IP = 00B8H CONST 常量IT0 = 0088H CONST 常量IT1 = 008AH CONST 常量JIANZHI = 0121H CODE 标号JP1 = 012AH CODE 标号JP2 = 0132H CODE 标号MAIN = 0030H CODE 标号OV = 00D2H CONST 常量P = 00D0H CONST 常量P0 = 0080H CONST 常量P1 = 0090H CONST 常量P2 = 00A0H CONST 常量P3 = 00B0H CONST 常量PAN = 0083H CODE 标号PAN2 = 0060H CODE 标号PAN4 = 009DH CODE 标号PCON = 0087H CONST 常量PS = 00BCH CONST 常量PSW = 00D0H CONST 常量PT0 = 00B9H CONST 常量PT1 = 00BBH CONST 常量PX0 = 00B8H CONST 常量PX1 = 00BAH CONST 常量RB8 = 009AH CONST 常量REN = 009CH CONST 常量RI = 0098H CONST 常量RS0 = 00D3H CONST 常量RS1 = 00D4H CONST 常量SBUF = 0099H CONST 常量SCON = 0098H CONST 常量SELECT = 008CH CODE 标号SELECT1 = 00B1H CODE 标号SELECT2 = 00BAH CODE 标号SELECTOUT = 00D6H CODE 标号SELECTOUT1 = 00EEH CODE 标号SM0 = 009FH CONST 常量SM1 = 009EH CONST 常量SM2 = 009DH CONST 常量SP = 0081H CONST 常量STAB = 0190H CODE 标号TB8 = 009BH CONST 常量TCON = 0088H CONST 常量TF0 = 008DH CONST 常量TF1 = 008FH CONST 常量TH0 = 008CH CONST 常量TH1 = 008DH CONST 常量TI = 0099H CONST 常量TL0 = 008AH CONST 常量TL1 = 008BH CONST 常量TMOD = 0089H CONST 常量TR0 = 008CH CONST 常量TR1 = 008EH CONST 常量UP = 010FH CODE 标号XTAB = 0172H CODE 标号XTABCHANG = 016CH CODE 标号XUEHAO = 0044H CODE 标号XUEHAO1 = 004BH CODE 标号XUEHAOCHANG = 0156H CODE 标号XUEHAOCHANG1 = 015BH CODE 标号XUEHAOCHANG2 = 0159H CODE 标号公有符号: 90私有符号: 0。
实验一I/O口输入输出实验一、实验目的掌握单片机P1口、P3口的使用方法。
二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED显示跑马灯效果。
以P3口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0到CP U模块的RXD(P3.0 口); 用8 位数据线连接八位逻辑电平显示模块的JD4B到CPU 模块JD8(P1 口)。
2)启动PC 机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。
五、实验参考程序;//******************************************************************;文件名: Port for MCU51;功能: I/O口输入、输出实验;接线: 用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);; 用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。
;//******************************************************************DIR BIT P3.0ORG 0000HLJMP STARTORG 0100HSTART:OUTPUT1:MOV A, #0FEHMOV R5,#8LOOP1: CLRCMOV C,DIRJC OUTPUT2MOV P1, ARL AACALL DELAYDJNZR5, LOOP1SJMP OUTPUT1OUTPUT2:MOV A, #07FHMOV R5, #8LOOP2:CLR CMOV C,DIRJNCOUTPUT1MOV P1, ARR AACALL DELAYDJNZ R5,LOOP2SJMP OUTPUT2DELAY:MOV R6,#0DELAYLOOP1:MOV R7,#0DELAYLOOP2:NOPNOPDJNZ R7,DELAYLOOP2DJNZ R6,DELAYLOOP1RETEND六、实验结果当八位逻辑电平的K0拨到上方,即输出高电平时,实验箱B5区的八个LED灯从左至右循环点亮,当K0拨到下方,即输出低电平时,八个LED灯从右至左循环点亮。
【报告】南邮单片机实验报告一、实验目的本次南邮单片机实验旨在通过实际操作和实践,深入了解单片机的工作原理、编程方法以及其在实际应用中的功能实现。
通过完成一系列实验任务,提高我们对单片机系统的设计、开发和调试能力,为今后在电子信息领域的学习和工作打下坚实的基础。
二、实验设备1、单片机开发板2、计算机3、编程软件(如 Keil C51)4、下载器5、示波器6、万用表三、实验内容(一)点亮 LED 灯1、原理通过控制单片机的引脚输出高低电平,来控制连接在引脚上的 LED 灯的亮灭。
2、编程实现使用 C 语言编写程序,设置相应引脚为输出模式,并通过循环语句实现 LED 灯的闪烁效果。
3、调试与观察将程序下载到单片机中,观察 LED 灯的闪烁情况,使用示波器测量引脚的电平变化,以验证程序的正确性。
(二)数码管显示1、原理数码管由多个发光二极管组成,通过控制不同段的发光二极管的亮灭,可以显示不同的数字和字符。
2、编程实现编写程序,实现数码管的动态扫描显示,将需要显示的数字或字符转换为对应的段码,并通过定时中断实现动态刷新。
3、调试与观察下载程序后,观察数码管的显示效果,检查是否能够正确显示预定的数字和字符。
(三)按键控制1、原理按键连接到单片机的引脚,当按键按下时,引脚的电平发生变化,通过检测引脚电平的变化来实现按键的识别和响应。
2、编程实现设置引脚为输入模式,采用查询或中断的方式检测按键状态,根据按键的不同操作执行相应的功能。
3、调试与观察按下不同的按键,观察系统的响应是否符合预期,如 LED 灯的状态改变、数码管显示内容的变化等。
(四)温度传感器采集与显示1、原理使用数字式温度传感器(如 DS18B20)采集环境温度,传感器将温度转换为数字信号,单片机通过特定的通信协议读取温度数据。
2、编程实现编写驱动程序,实现与温度传感器的通信,读取温度值,并将其转换为合适的显示格式。
3、调试与观察将传感器置于不同的温度环境中,观察数码管或液晶显示屏上显示的温度值是否准确。