南昌航空大学 单片机实验(全)
- 格式:doc
- 大小:1.66 MB
- 文档页数:20
单片机实验报告一、实验目的本次单片机实验的主要目的是通过实际操作和编程,深入了解单片机的工作原理和应用,掌握单片机系统的设计、开发和调试方法,提高自身的动手能力和解决问题的能力。
二、实验设备1、单片机开发板2、计算机3、编程软件(如 Keil)4、下载器5、示波器6、万用表三、实验内容1、点亮 LED 灯通过编写简单的程序,控制单片机的引脚输出高低电平,从而点亮或熄灭连接在该引脚上的 LED 灯。
这是单片机最基础的操作之一,旨在熟悉单片机的编程环境和引脚控制方式。
2、数码管显示利用单片机驱动数码管,实现数字的显示。
需要了解数码管的工作原理和驱动方式,通过编程控制数码管的段选和位选信号,显示不同的数字。
3、按键输入设计按键电路,通过读取按键的状态,实现对单片机系统的输入控制。
例如,通过按键切换不同的显示模式或控制其他外部设备。
4、定时器/计数器应用使用单片机的定时器/计数器功能,实现定时、计数等操作。
例如,设计一个定时闪烁的 LED 灯,或者通过计数器统计外部脉冲的个数。
5、串口通信实现单片机与计算机之间的串口通信,将单片机采集到的数据发送到计算机上进行显示和处理,或者接收计算机发送的指令对单片机系统进行控制。
四、实验原理1、单片机的基本结构单片机通常由中央处理器(CPU)、存储器(包括程序存储器和数据存储器)、输入输出接口(I/O 口)、定时器/计数器、中断系统等部分组成。
2、编程语言本次实验采用 C 语言进行编程。
C 语言具有简洁、高效、可移植性强等优点,非常适合单片机的开发。
3、引脚功能单片机的引脚分为电源引脚、时钟引脚、复位引脚、I/O 引脚等。
通过对这些引脚的合理配置和控制,可以实现各种功能。
4、数码管驱动原理数码管分为共阴极和共阳极两种类型。
通过控制数码管的段选和位选信号,可以使数码管显示不同的数字和字符。
5、按键检测原理按键通常采用上拉电阻或下拉电阻的方式连接到单片机的I/O 引脚。
PWM波信号发生器的研制课程设计说明书课程设计名称:单片机专业课设课程设计题目: PWM信号发生器的研制学院名称:信息工程学院专业:电子信息工程班级:学号:姓名:评分:教师:20 13 年 7 月 2 日摘要1PWM波信号发生器的研制随着电力电子全控开关器件的出现,脉宽调制技术(PWM)在电力电子变流技术中获得了,。
泛的应Hj,如直流开关电源(DC/DC变换)、交。
交变频(AC/AC变换)、交.直.交变频系统、UPS电源(DC/AC变换)、高功率因数整流(PWM整流或功率l灭l数校正PFC等)等电力电子各个应用领域,无不采用PWM控制技术。
PWM控制最基本的实现方法是通过载波和控制波的模拟电路调制米产生,如采用三角形载波(或锯齿波)和直流(或正弦波)控制信号比较器进行比较产生PWM波。
这种方法在模拟控制技术中广泛采用,并出现过许多产生PWM波控制芯片,如用于开关电源的TL494、SG3525、UC3842等。
随着数字控制技术的发展,又出现了许多数字式PWM集成芯片,如用于变频调速的三相PWM发生器HEF4752、SLE4520、MA818等。
但与迅速发展的微机控制技术相比,该方法显示出电路复杂、调制方式不够灵活等缺点,而采用软件计算的实时PWM控制策略越来越彼人们接受,并出现了许多不同的PWM波的计算方法,如采样SPWM法、谐波注入PWM法、均值PWM法、等面积PWM法等。
电力电子的微机PWM控制技术已成为一种必然趋势。
因此本文就PWM的单片机控制与实现进行分析研究,通过对外围电路芯片的设计实现PWM输出波形的频率、电压幅值、占空比的连续调节,达到产生PWM信号目的。
关键字:脉宽调制技术(PWM)、占空比、控制信号2PWM波信号发生器的研制单片机原理与接口技术课程设计任务书20 12 -20 13 学年第 2 学期第 17 周- 19 周注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。
南昌航空大学实验报告二0一一年 9月28 日课程名称:单片微型机实验名称:实验一软件实验9、10班级: 080611 姓名:吴智丽学号: 08061103指导教师评定:签名:一、实验目的1、熟悉8031定时/计数功能,掌握定时/计数初始化编程方法。
2、熟悉MCS—51定时器、串行口和中断初始化编程方法,了解定时器应用在实时控制中程序的设计技巧。
二、实验内容1、对定时器0外部输入的脉冲进行计数,并送显示器显示。
2、编写程序,从DVCC系列单片机实验仪键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
三、实验步骤脉冲计数1、实验程序框图2 、实验操作(1)把8032CPU的P3.4插孔接T0—T7任一根信号线或单脉冲输出空“SP”。
(2)用连续方式从起始地址02A0H开始运行程序(按02A0后按EXEC键)。
(3)观察数码管显示的内容应为脉冲个数。
(4)脉冲计数程序CONT: MOV SP,#53HMOV TMOD,#05H;初始化定时/计数器MOV TH0,#00HMOV TL0,#00HSETB TR0;允许定时/计数中断CONT1: MOV R2,TH0;取计数值MOV R3,TL0LCALL CONT2;调二转十进制子程序MOV R0,#79HMOV A,R6LCALL PWORMOV A,R5LCALL PWORMOV A,R4LCALL PWORLCALL DISP;调显示子程序SJMP CONT1;循环CONT2: CLR A;清R4、R5、R6MOV R4,AMOV R5,AMOV R6,AMOV R7,#10HCONT3: CLR C;R2、R3左移,移出的位送CYMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6;R4、R5、R6×2 + CY送R4、R5、R6 DA AMOV R6,A;十进制调整MOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,CONT3;循环16次RETPWOR: MOV R1,A ;;拆送显示缓冲区LCALL PWOR1MOV A,R1SWAP APWOR1: ANL A,#0FHMOV @R0,AINC R0RETDISP: SETB 0D4H;显示子程序MOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1: MOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,AMOV DPTR,#CDATAMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,ADISP2: DJNZ R3,DISP2DEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1MOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,ACLR 0D4HRETCDATA: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H, 90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0D EH电脑时钟1、实验程序框图2、实验操作(1) 用连续方式从起始地址0340H开始执行程序(输入0340后按EXEC键)。
单片机实验第二次实验:图见实验题1.P1.0~P1.7这八个发光二极管全部点亮#include#define uchar unsigned char#define uint unsigned intsbit greenLed=P1^0;Delay(uint cnt){ uchar i;do{for(i=0;i<165;i++);}while(cnt--);}main(){ while(1){ greenLed=0;Delay(1000);greenLed=1;Delay(1000);}}2. P1.0~P1.7这八个发光二极管循环点亮#include delay(unsigned char cnt){ unsigned int i;do{for(i=0;i<6000;i++);}while(cnt--);}main(){ unsigned char a;P1=~a;while(1){if(a!=0){ delay(5);a<<=1;P1=~a;}else{a=0x01;P1=~a;}}}3.通过外部中断控制八盏灯分别右移,左移,闪烁,双灯同时左移。
#include#define uchar unsigned charuchar code LedTable[]= {0x03,0x0c,0x30,0xc0};uchar led_flag = 4;uchar a; Delay(uchar cnt){ unsigned int i;do{ for(i=0;i<6000;i++);}while(cnt--);}void Led_rr(void)//led右移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x80;P1 = ~a;a >>= 1;}}void Led_rl(void)//led左移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x01;P1 = ~a;a <<= 1;Delay(10);}}void Led_spark(void){ P1 = 0xff;Delay(10);P1 = 0;Delay(10);}void Led_lr_doble(){ uchar i;for (i=0;i<4;i++){ P1= ~LedTable[i];Delay(10);}}void int1(void) interrupt 2 //中断服务函数{ led_flag++;if(led_flag >= 3) led_flag = 0;}void main(void){ EA = 1;EX1 = 1;IT1 = 1;while(1){ if(led_flag ==4){ Led_spark();}if(led_flag == 0){ Led_rl();}if(led_flag == 1){ Led_rr();}if(led_flag == 2){ Led_lr_doble();}}第三次实验:1.设单片机的=12MHz,要求用定时器/计数器T0以方式1在P1.0脚上输出周期为4ms的方波。
实验报告实验课程:单片机原理与应用学生姓名:李瑞欣学号:6101113078专业班级:电气工程及其自动化132指导老师:汪兴贤2015年 12月日实验一I/O 口输入、输出实验一、实验目的掌握单片机P1口、P3口的使用方法。
二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。
以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。
三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。
因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区),八位逻辑电平输出电路原理图参见图1-1。
八位逻辑电平显示电路原理图参见图1-2。
五、实验预习要求学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
六、实验步骤1)系统各跳线器处在初始设置状态。
用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口);用8 位数据线连接八位逻辑电平显示模块的JD4B 到CPU 模块的JD8(P1 口)。
2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。
七、实验分析和试验现象1、实验的流程图:2、实验现象:程序下载到单片机以后,现象是LED灯沿着一个方向循环流动,当拨动K0开关后,亮的LED灯跳到边缘然后沿着相反的方向循环流动。
3、心得体会:通过这次实验,我掌握了单片机P1口、P3口的使用方法。
了解并熟悉了单片机 I/O口和LED灯的电路结构,对于单片机实验台上的相关器件有了一定了解,深化了课本上对于I/O口功能的理解,P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
一、前言随着科技的发展,单片机技术在各个领域得到了广泛应用。
为了提高我们的动手能力和实践能力,学校组织了单片机遥控飞机实训。
本次实训旨在通过实际操作,让我们深入了解单片机遥控飞机的原理和制作过程,掌握单片机在遥控飞机中的应用。
二、实训目的1. 了解单片机遥控飞机的原理和组成;2. 掌握单片机在遥控飞机中的应用;3. 学会使用相关软件和硬件进行遥控飞机的制作;4. 培养团队协作能力和创新精神。
三、实训内容1. 单片机遥控飞机原理及组成单片机遥控飞机主要由以下几个部分组成:(1)单片机:负责接收遥控信号、控制飞机的飞行姿态和速度等;(2)接收模块:接收遥控器发送的信号;(3)电机驱动模块:驱动电机转动,实现飞机的飞行;(4)传感器模块:检测飞机的姿态和位置等信息;(5)遥控器:发送控制信号给单片机。
2. 单片机遥控飞机制作(1)搭建硬件平台:根据设计要求,选用合适的单片机、接收模块、电机驱动模块、传感器模块等,将它们连接到一起,搭建硬件平台;(2)编程:使用C语言编写单片机程序,实现接收遥控信号、控制电机转动、读取传感器数据等功能;(3)调试:在搭建好的硬件平台上进行程序调试,确保飞机能够按照预期飞行;(4)测试:在开阔地带进行飞行测试,观察飞机的飞行状态,对程序和硬件进行调整,直至满足设计要求。
四、实训过程1. 硬件平台搭建根据设计要求,我们选择了以下硬件:(1)单片机:STC89C52;(2)接收模块:RFM22B;(3)电机驱动模块:L298N;(4)传感器模块:MPU6050;(5)遥控器:RFM22B。
将以上硬件按照电路图连接到一起,搭建硬件平台。
2. 编程使用C语言编写单片机程序,实现以下功能:(1)接收遥控信号;(2)读取MPU6050传感器数据;(3)控制电机转动;(4)显示飞行状态。
3. 调试在搭建好的硬件平台上进行程序调试,确保飞机能够按照预期飞行。
4. 测试在开阔地带进行飞行测试,观察飞机的飞行状态,对程序和硬件进行调整,直至满足设计要求。
52单片机有3个定时器,T2是一个16位自动重载的,像T0和T1的方式2一样,只不过它是16位重载,如果作为计数器或定时用,中断用的是5,就是interrupt 5,T2的引脚是P1.0口。
P1.0作为I/O 口用了以后T2计数是不行了,不过定时或是作为串口时钟还是可以的。
T2CON(T2的控制寄存器),字节地址0C8H:0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8HTF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下:TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。
只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。
EXF2:当EXEN2=1时,且T2EX引脚(P1.0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。
EXF2也是只能通过软件来清除的。
RCLK:串行接收时钟标志,只能通过软件的置位或清除;用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器TCLK:串行发送时钟标志,只能通过软件的置位或清除;用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器EXEN2:T2的外部允许标志,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2;EXEN2=1:当T2未用作串行波特率发生器时,允许外部时钟触发T2,当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF2,申请中断。
TR2:T2的启动控制标志;TR2=0:停止T2;TR2=1:启动T2C/T2:T2的定时方式或计数方式选择位。
只能通过软件的置位或清除;C/T2=0:选择T2为定时器方式;C/T2=1:选择T2为计数器方式,下降沿触发。
CP/RT2:捕获/重装载标志,只能通过软件的置位或清除。
单⽚机实验P3.3输⼊、P1⼝输出和步进电机控制实验南昌航空⼤学实验报告⼆0⼀⼀年⼗⽉⼀⼗七⽇课程名称:单⽚微型机实验名称:P3.3输⼊、P1⼝输出和步进电机控制实验班级: 080611 学⽣姓名:学号: 08061108 指导教师评定:签名:⼀、实验⽬的1、掌握P3⼝、P1⼝简单使⽤;2、学习延时程序的编写和使⽤;3、了解步进电机控制的基本原理;4、掌握步进电机转动编程⽅法。
⼆、实验内容及要求1、P3.3输⼊、P1⼝输出实验1)P3.3⼝做输⼊⼝,外接⼀脉冲,每输⼊⼀个脉冲,P1⼝按⼗六进制加⼀。
P1⼝做输出⼝,编写程序,使P1⼝接的8个发光⼆极管L1—L8按16进制加⼀⽅式点亮发光⼆极管。
2)P1⼝是准双向⼝,它作为输出⼝时与⼀般的双向⼝使⽤⽅法相同,由准双向⼝结构可知:当P1⼝作为输⼊⼝时,必须先对它置⾼电平,使内部MOS管截⽌,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输⼊产⽣影响。
若不先对它置⾼,且原来是低电平,则MOS管导通,读⼊的数据是不正确的。
3)延时⼦程序的延时计算问题。
对于延时程序:DELAY :MOV R6, #00HDELAY1:MOV R7, #80HDJNZ R7, $DJNZ R6, DELAY1查指令表可知MOV、DJNZ指令均需⽤两个机器周期,⽽⼀个机器周期时间长度为12/ 6.0MHZ,所以该段指令执⾏时间为:((80+1)×256+1)×2×(12÷6000000)=132.1ms。
图1 P3.3输⼊、P1图2 实验电路原理图2、步进电机控制实验1)从键盘上输⼊正、反转命令,转速参数和转动步数显⽰在显⽰器上,CPU再读取显⽰器上显⽰的正、反转命令,转速级数(16级)和转动步数后执⾏。
转动步数减为零时停⽌转动。
2)步进电机驱动原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。
驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速,微电脑控制步进电机最适合。
南昌航空大学实验报告课程名称:微机原理实验名称:中断控制器8259A应用班级:100451 姓名:张冲学号:10045127教师评定:签名:一、实验目的:1、掌握中断控制器8259A与微机接口的原理和方法。
2、掌握中断控制器8259A的应用编程。
二、实验内容:本系统中已设计有一片8259A中断控制芯片,工作于主片方式,8个中断请求输入端IR0~IR7对应的中断型号为8~F。
8259A和8088系统总线直接相连,8259A上连有一系统地址线A0,故8259A有两个端口地址,本系统中为60H、61H.60H用来写ICW1,61H用来写ICW2、ICW3、ICW4,初始化命令字写好后,再写操作命令字。
OCW2、OCW3用口地址60H,OCW1用口地址61H。
使用了3号中断源,IR3插孔和SP插孔相连,中断方式为边沿触发方式,每按一次AN按钮产生一次中断信号,向8259A发出中断请求信号。
如果中断源电平信号不符合规定要求则自动转到7号中断,显示"Err".CPU响应中断后,在中断服务中,对中断次数进行计数并显示,计满5次结束,显示器显示"Good".2、实验线路连接(1)8259模块上的INT连8088的INTR.(2)8259模块上的INTA连8088的INTA。
(3)MP区SP插孔和8259的3号中断IR3插孔相连,SP端初始为低电平。
(4)8259的D0~D7连到BUS2区的XD0~XD7.(5)8259模块上的CS端接Y6。
(6)8259模块上的A0连到BUS区的XA0。
(7)8259模块上的RD、WR信号线分别连到BUS区的XRD、XWR上。
三、实验步骤:运行实验程序:单机时,实验程序起始地址为F000:91A0。
在系统显示监控提示符“P."时:输入F000按F1键输入91A0按EXEC键在系统上显示"8259-1".按AN按钮,按满5次显示"Good".四、实验参考程序:CODE SEGMENT MOV AL,08HASSUME CS:CODE MOV DX,INTPORT2INTPORT1 EQU 0060H OUT DX,ALINTPORT2 EQU 0061H MOV AL,09HINTQ3 EQU INTREEUP3 OUT DX,ALINTQ7 EQU INTREEUP7 MOV AL,0F7HORG 11A0H OUT DX,ALSTART:CLD MOV BYTE PTR[0701H],01HCALL WBUF1 TIME=1WRITE INTRRUPT STIMOV AL,13H WATING:CALL DISPMOV DX,INTPORT1 DISP 8259-1OUT DX,AL JMP WA TINGMOV ES,AX WRINTVER:MOV AX,0HMOV DI,002CH OUT DX,ALLEA AX,INTQ3 STISTOSW IRETMOV AX,0000H INTREEUP7:CLISTOSW MOV AL,20HMOV AX,INTQ7 MOV DX,INTPORT1STOSW OUT DX,ALRET MOV DS:[077AH],1C1CHINTREEUP3:CLI MOV DS:[077CH],101BHMOV AL,DS:[0701H] MOV DS:[077EH],1010HCALL CONVERS INTRE3:CALL DISPMOV BX,077BH JMP INTRE3MOV AL,10H DISP:MOV DX,077FHMOV CX,05H MOV AH,20HINTRE0:MOV BYTE PTR[BX],AL DISP0:MOV CX,00FFHINC BX MOV BX,DXLOOP INTRE0 MOV BL,DS:[BX]MOV AL,20H MOV BH,0HMOV DX,INTPORT1 PUSH DXOUT DX,AL MOV DX,0FF22HADD BYTE PTR:[0701H],01H MOV AL,CS:[BX+127BH]CMP BYTE PTR:[0701H],06H OUT DX,ALJNA INTRE2 MOV DX,0FF21HMOV DS:[077AH],191AH MOV AL,AHMOV DS:[077CH],1819H OUT DX,ALMOV DS:[077EH],1010H DISP1:LOOP DISP1INTRE1:CALL DISP POP DXJMP INTRE1 DEC DXCONVERS:ADD AL,OFH SHR AH,01HMOV BX,077AH JNZ DISP0MOV DS:[BX],AL MOV DX,0FF22HINC BX MOV AL,0FFHRET OUT DX,ALINTRE2:MOV AL,20H RETMOV DX,INTPORT1 DA TA1:DBDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H 0FFH,0CH,0DEH,0C7H,8CH,0F3H,0BFH DBDB 90H,0A3,0A1H,86H,8FH 80H,90H,88H,83H,0C6H,0A1H,86H,8EH WBUF1:MOV BX,0 MOV WORD PTR:[BX+077AH],0509H MOV WORD PTR:[BX+077AH],1701H ADD BX,2ADD BX,2 MOV WORD PTR :[BX+077AH],0802HRETCODE ENDSEND START五、实验体会:本次实验中只出来了"8259-1"结果,没有出现"Good"结果。
南昌航空大学实验报告二0一一年十月二十三日课程名称:单片微型机实验名称:实验四 8031 串行口应用班级: 080611 姓名:学号: 08061108指导教师评定:签名:一、实验目的1 掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。
2 了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。
3 了解PC机通信的基本要求。
二、实验内容1 利用8031单片机串行口,实现与PC机通信。
2 本实验实现以下功能,将实验机键盘上键入的数字、字母显示到PC机显示器上,反过来从PC机键盘上输入的字符(0—F)显示到实验仪的数码管上。
三、实验步骤1、实验电路原理图1)实验系统中考虑用户可以方便使用串行口实现双机或和上位机通信,系统有用户专用串行接口,只要配上用户专用通信电缆线就可以实现和上位机通信,不影响监控系统和上位机的联机工作。
J10就是用户专用串行接口,将J10用用户专用通信线连到上位机的串口上。
注意不要和上位机系统用串行口冲突。
2)实验时需将8031串行接收信号线P3.0(RXD)连到J10下面RXD插孔;8031的P3.1(TXD)连到J10下面TXD插孔上。
3 )两台实验机必须共地2 、实验操作1)在DVCC实验系统处于“P ”状态下。
2)输入四位起始地址0D00后,按EXEC键连续运行程序。
3)在上位机上运行DVSIO程序。
4)从DVCC实验系统的键盘上输入数字键,会显示在上位机屏幕上,从上位机键盘上输入数字键会显示在实验系统的数码管上。
3、8031 串行口应用一(与PC机通信)程序ORG 07F0HSTART: MOV SP,#60HMOV A,#02H;初始化显示缓冲区MOV R0,#79HMOV @R0,AINC R0MOV A,#10HMOV @R0,AINC R0MOV A,#01HMOV @R0,AINC R0MOV A,#03HMOV @R0,AINC R0MOV A,#00HMOV @R0,AINC R0MOV A,#08HMOV @R0,AMOV A,#7EH;置显示位置指针MOV DPTR,#1FFFHMOVX @DPTR,AMOV 87H,#80H;置SMOD=1MOV SCON,#50H;串口方式1MOV TMOD,#20H;T1 方式1MOV TL1,#0F3H;波特率 2400 的常数MOV TH1,#0F3HSETB TR1;启动定时器CLR ET1 ;关中断CLR ESWAIT: JBC RI,DIS_REC;是否接收到数据LCALL DISP;无数据调用显示程序SJMP WAIT;循环等待DIS_REC:MOV A,SBUF;读串口接收到的数据LCALL DATAKEY;显示输入的数字(0-F)DB 79H,7EHAJMP WAIT ;循环DATAKEY:MOV R4,A;数字处理子程序MOV DPTR,#1FFFHMOVX A,@DPTRMOV R1,AMOV A,R4MOV @R1,ACLR APOP 83HPOP 82HMOVC A,@A+DPTRINC DPTRCJNE A,01H,DATAKEY2DEC R1CLR AMOVC A,@A+DPTRDATAKEY1: PUSH 82HPUSH 83HMOV DPTR,#1FFFHMOVX @DPTR,APOP 83HPOP 82HINC DPTRPUSH 82HPUSH 83HRETDATAKEY2: DEC R1MOV A,R1SJMP DATAKEY1DISP : SETB 0D4H;调用显示子程序MOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1 : MOV DPTR,#DATACOMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,AMOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,ADEC R1LCALL DELAYCLR CMOV A,R2RRC AMOV R2,AJNZ DISP1CLR 0D4HRETDELAY: MOV R7,#03H DELAY0: MOV R6,#0FFHDELAY1: DJNZ R6,DELAY1DJNZ R7,DELAY0RETDATACO:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80 H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H, 0DEHEND四、实验小结通过本次实验初步掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。
南昌航空大学信息工程学院实验报告课程名称:单片微型机原理学号:姓名:指导教师:________ ___________ 成绩:_________________________南昌航空大学实验报告2014年 3 月 14 日课程名称: 单片微型机原理 实验名称: 清零、电脑时钟 班级: 姓名: 学号: 指导老师评定: 签名:一、实验目的1、掌握汇编语言设计和调试方法,熟悉键盘操作;2、熟悉MCS —51定时器、串行口和中断初始化编程方法,了解定时器应用在实时控制中程序的设计技巧。
二、实验内容1、把7000H ~ 70FFH 的内容清零。
2、编写程序,从DVCC 系列单片机实验仪键盘上输入时间初值,用定时器产生0.1S 定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
三、实验步骤清零程序1、实验程序框图NY 开始 R0 =0,DPTR=7000H 00送到(DPTR) DPTR+1,R0+1 R0 = FF ?结束2、当DVCC单片机仿真实验系统独立工作时(1)将固化区EPROM中实验程序目标码传送到仿真RAM区,操作如下:输入0后按F1键,再输入0FFF后按F2键,再输入0后按EPMOV稍等,系统返回初始状态,显示“P."。
(2)按F2键进入仿真1态,仿真实验系统显示闪动“P......”时,根据表一所示,通过键盘输入实验程序的起始地址0030H,再按执行键EXEC,表示连续运行该程序,稍后,按RESET键退出运行;如果以单步运行程序,则输入0300后,按STEP键,按一次执行一条语句,直到执行到003CH为止,按MON键退出运行;如果以断点运行程序,则先输入003C (断点地址),再按F1键,再输入0030(起始地址),然后按EXEC键执行程序,当执行到003CH时自动停下来,此时按MON键退出。
(3)用存储器读写方法检查7000H—70FFH中的内容应全是00H。
3、当DVCC单片机仿真实验系统联PC机工作时(1)在闪动“P.”状态,按PCDBG键。
(2)在PC机处于WIN95/98软件平台下,单击DVCC图标。
(3)在系统设置选项中设定仿真模式为内程序、内数据。
(4)根据屏幕提示进入51/96动态调试菜单。
(5)联接DVCC实验系统(Ctrl + H)。
(6)装载目标文件(Ctrl + L)。
(7)设置PC起始地址。
(8)从起始地址开始连续运行程序(F9)或单步(F8)或断点运行程序。
(9)单步、断点运行完后,在存储器窗口内检查7000H—70FFH中的内容是否全为00H。
4、清零程序ORG 0030HCLEAR: MOV R0,#00HMOV DPTR,#7000H;设数据指针DPTR=7000HCLEAR1: CLR AMOVX @DPTR,A ;清第一个数据单元INC DPTR ;指针加一INC R0 ;字节数加一CJNE R0,#00H,CLEAR1 ;判字节数满256个否,不满继续CLEAR2: SJMP CLEAR2 ;满结束程序END电脑时钟1、实验程序框图2、实验操作(1) 用连续方式从起始地址0340H 开始执行程序(输入0340后按EXEC 键)。
(2) 连续运行程序,在键盘上输入时间初值。
如果输入时分秒初值超范围,则显示000000后要求重新设置初值,初值的默认值为000000。
(3) 再次按EXEC 键时钟开始工作,数码管上实时显示时间值。
3、电脑时钟程序 ORG 000BH LJMP TINTRUP ORG 0340h CLOCK0: MOV SP,#50H MOV R0,#7EH ;清显示缓冲区MOV R4,#06H CLR A CLOCK1:MOV @R0,A DEC R0 DJNZ R4,CLOCK1 MOV A,#7EH MOV DPTR,#1FFFH MOVX @DPTR,A MOV 76H,#00H ;初始化定时/计数器MOV 77H,#00H LCALL KEYDISP0 ;调显示键扫子程序LCALL DISDA0 ;调显示缓冲区放数程序 MOV TMOD,#01H ORL IE,#82H MOV TL0,#0B7HMOV TH0,#3CH MOV 23H,#00H SETB TR0 ;开定时中断 CLOCK2: LCALL DISP ;调显示子程序 LCALL DISDA0 ;调显示缓冲区放数子程序 SJMP CLOCK2 ;循环 DISDA0: MOV R0,#79H ;显示缓冲区放数子程序MOV A,22H ACALL DISDA MOV A,21HACALL DISDA 恢复初值,保护现场定时中断 Y Y YNN N NY 1秒到吗? 0.1秒单元清零,60秒到吗? 秒单元清零,60秒到吗? 分单元清零,24小时到吗? 时单元清零 堆栈返回 0.1秒加1秒加1分加1时加1 NY清显示缓冲区 初始化定时计数器 显示初值000000 从键盘设时钟初值 判时钟初值合乎规定否? 开始 开定时器 显示器显示当前时钟值MOV A,20HACALL DISDARETDISDA: M OV R1,AACALL DISDA1MOV A,R1SWAP ADISDA1: ANL A,#0FHMOV @R0,AINC R0RETTINTRUP: MOV TL0,#0B7H;定时器中断服务程序MOV TH0,#3CH;重新置初值PUSH PSWPUSH ACC;保护当前值SETB 0D3HINC 23H;0.1秒单元加1MOV A,23HCJNE A,#0AH,TINTRUP1;判1秒到否,未到继续MOV 23H,#00H;清0.1秒单元MOV A,22HINC A;秒单元加1DA AMOV 22H,ACJNE A,#60H,TINTRUP1;判60秒到否,未到继续MOV 22H,#00H;清秒计数单元MOV A,21HINC A;分单元加1DA AMOV 21H,ACJNE A,#60H,TINTRUP1;判60分到否,未到继续MOV 21H,#00H;清分计数单元MOV A,20HINC A;时单元加1DA AMOV 20H,ACJNE A,#24H,TINTRUP1;判24小时到否,未到继续MOV 20H,#00H;清时计数单元TINTRUP1:POP ACCPOP PSWRETI;返回主程序KEYDISP0:LCALL KEY;调显示键扫子程序JNC FANCKEY;转功能键处理DA TAKEY: LCALL DATAKEY1;数值键处理DB 79H,7EHSJMP KEYDISP0FANCKEY: CJNE A,#16H,KEYDISP0 ;是执行键,判输入的秒初值是否超限MOV A,7AHSWAP AORL A,79HMOV 22H,ACJNE A,#60H,FANCKEY1 FANCKEY1: JNC FANCKEY4;判输入的分初值是否超限MOV A,7CHSWAP AORL A,7BHMOV 21H,ACJNE A,#60H,FANCKEY2 FANCKEY2: JNC FANCKEY4;判输入的时初值是否超限MOV A,7EHSWAP AORL A,7DHMOV 20H,ACJNE A,#24H,FANCKEY3 FANCKEY3:JNC FANCKEY4RETFANCKEY4:CLR TR0LJMP CLOCK0DA TAKEY1:MOV R4,A;数字键处理子程序MOV DPTR,#1FFFH MOVX A,@DPTRMOV R1,AMOV A,R4MOV @R1,ACLR APOP 83HPOP 82HMOVC A,@A+DPTRINC DPTRCJNE A,01H,DATAKEY3DEC R1CLR AMOVC A,@A+DPTRDA TAKEY2: PUSH 82H PUSH 83HMOV DPTR,#1FFFHMOVX @DPTR,APOP 83HPOP 82HINC DPTRPUSH 82HPUSH 83HRETDA TAKEY3: DEC R1MOV A,R1SJMP DATAKEY2 KEY0: MOV R6,#20H;数字键闪动程序MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,@R0MOV R7,AMOV A,#10HMOV @R0,AKEY3: LCALL KEYDISP JNB 0E5H,KEY2DJNZ R6,KEY3MOV DPTR,#1FFFHMOVX A,@DPTRMOV R0,AMOV A,R7MOV @R0,AKEY: MOV R6,#50HKEY1: LCALL KEYDISPJNB 0E5H,KEY2DJNZ R6,KEY1SJMP KEY0KMOV A,@R1MOV R3,AXRL A,R4MOV R3,04HMOV R4,02HJZ KEYDISP1MOV R2,#88HMOV R4,#88HKEYDISP1: DEC R4MOV A,R4XRL A,#82HJZ KEYDISP2MOV A,R4XRL A,#0EHJZ KEYDISP2MOV A,R4ORL A,R4JZ KEYDISP3MOV R4,#20HDEC R2LJMP KEYDISP5KEYDISP3: MOV R4,#0FH KEYDISP2: MOV R2,04HMOV R4,03HKEYDISP5: MOV R1,#76HMOV A,R2MOV @R1,AINC R1MOV A,R3MOV @R1,AMOV A,R4CJNE R3,#10H,KEYDISP4 KEYDISP4: RETDISP: SETB 0D4H ;显示子程序MOV R1,#7EHMOV R2,#20HMOV R3,#00HDISP1: MOV DPTR,#0FF21HMOV A,R2MOVX @DPTR,AMOV DPTR,#DATACOMOV A,@R1MOVC A,@A+DPTRMOV DPTR,#0FF22HMOVX @DPTR,ADISP2: DJNZ R3,DISP2DEC R1CLR CMOV A,R2RRC AMOV R2,AJNZ DISP1MOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,ACLR 0D4HRETDA TACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,8 0H,90HDB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H ,0DEH键扫子程序KEYSM:SETB 0D4HMOV A,#0FFHMOV DPTR,#0FF22HMOVX @DPTR,AKEYSM0: MOV R2,#0FEHMOV R3,#08HMOV R0,#00HKEYSM1: MOV A,R2MOV DPTR,#0FF21HMOVX @DPTR,A;键矩阵中第1列置0NOPRL AMOV R2,AMOV DPTR,#0FF23H;读键的行值MOVX A,@DPTRCPL ANOPNOPNOPANL A,#0FHJNZ KEYSM2INC R0;无键且未到最后一列继续DJNZ R3,KEYSM1SJMP KEYSM10KEYSM2: ;有键,计算键值CPL AJB 0E0H,KEYSM3MOV A,#00HSJMP KEYSM7KEYSM3: JB 0E1H,KEYSM4MOV A,#08HSJMP KEYSM7KEYSM4: JB 0E2H,KEYSM5MOV A,#10HSJMP KEYSM7KEYSM5: JB 0E3H,KEYSM10MOV A,#18HKEYSM7: ADD A,R0CLR 0D4HCJNE A,#10H,KEYSM9KEYSM9: JNC KEYSM10MOV DPTR,#KEYDATAMOVC A,@A+DPTRKEYSM10: RET ;返回KEYDATA: DB 07H,04H,08H,05H,09H,06H,0AH,0BH ;键值表(0—F)DB01H,00H,02H,0FH,03H,0EH,0CH,0DH四、实验小结通过本次实验初步了解了单片机工作的基本原理,再次复习了汇编语言编写的相关内容,练习了单片机汇编程序设计的相关知识。