51单片机实验代码.pdf

上传人:知****量 文档编号:18097803 上传时间:2022-05-29 格式:PDF 页数:33 大小:729.54KB
返回 下载 相关 举报
51单片机实验代码.pdf_第1页
第1页 / 共33页
51单片机实验代码.pdf_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《51单片机实验代码.pdf》由会员分享,可在线阅读,更多相关《51单片机实验代码.pdf(33页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、实验二实验二 清零程序清零程序一、 实验目的实验目的 掌握汇编语言设计和调试方法,熟悉键盘操作。二、 实验内容实验内容 把 2000H20FFH 的内容清零。三、三、 实验程序框图实验程序框图四、 实验步骤实验步骤 用连续或单步的方式运行程序,检查200020FF中执行程序前后的内容变化。五、 思考思考 假使把 2000H20FFH 中的内容改成 FF,如何修改程序。六、 程序清单程序清单 文件名: SW01.ASMORG 0000HLJMP SE01ORG 0640HSE01:MOV R0,#00HMOV DPTR,#2000H; (0000H)送 DPTRLOO1:CLR AMOVX DP

2、TR,A;0 送(DPTR)INC DPTR;DPTR+1INC R0;字节数加 1CJNE R0,#00H,LOO1;不到 FF 个字节再清LOOP:SJMP LOOPEND实验三实验三 拆字程序拆字程序一、实验目的一、实验目的 掌握汇编语言设计和调试方法二、实验内容二、实验内容 把 2000H 的内容拆开,高位送 2001H 低位,低位送 2002H 低位,2001H、2002H 高位清零,一般本程序用于把数据送显示缓冲区时用。三、实验程序框图三、实验程序框图开始2000H 内容送 A高地位交换屏蔽高位后送 2001H2000H 内容送 A屏蔽高位后送 2002H结束四、实验步骤四、实验步

3、骤 用连续或单步方式运行程序,检查2000H2002H 中内容变化情况。五、思考五、思考 如何用断点方式调试本程序六、程序清单六、程序清单 文件名:SW02.ASMORG 0000HLJMP SE02ORG 0660HSE02:MOV DPTR,#2000HMOVX A,DPTRMOV B,A;(2000)ABSWAP A;交换ANL A,#0FH;屏蔽高位INC DPTRMOVX DPTR,A;送 2001HINC DPTRMOV A,BANL A,#0FH; (2000)内容屏蔽高位MOVX DPTR,A;送 2002HLOOP:JMP LOOPEND实验四实验四 数据区传送子程序数据区传

4、送子程序一、 实验目的实验目的 掌握 RAM 中的数据操作二、 实验内容实验内容 把 R2、R3 源 RAM 区首地址内的 R6、R7 字节数据传送到 R4、R5 目的 RAM 区。三、三、 实验程序框图实验程序框图开始源地址内容送 A(A)送目的地址源地址加 1目的地址加 1字节数到么?N结束四、 实验步骤实验步骤 在 R2、R3 中输入源首址(例如0000H) ,R4、R5 中输入的目的地址(例如2000H) ,R6、 R7 中输入字节数 (例如 1FFFH) , 运行程序, 检查 0000H1FFFH中内容是否和 2000H3FFFH中内容完全一致。五、 程序清单程序清单 文件名 SW0

5、4.ASMORG 0000HLJMP SE22ORG 07B0HSE22:MOV DPL,R3MOV DPH,R2;建立源程序首址MOVX A,DPTR;取数MOV DPL,R5MOV DPH,R4;目的地首址MOVX DPTR,A;传送CNE R3,#0FFH,LO42INC R2LO42:INC R3;源地址加 1CJNE R5,#0FFH,LO43INC R4LO43:INC R5;目的地址加 1CJNE R7,#00H,LO44CJNE R6,#00H,LO45;字节数减 1LOOP: SJMP LOOPNOPLO44:DEC R7SJMP SE22LO45:DEC R7DEC R6S

6、JMP SE22;未完继续END实验五实验五 简单简单 I/OI/O 口应用口应用一、 实验目的 掌握 P1 口作为 I/O 口的使用方法,理解读引脚和读锁存器的区别。二、 实验要求 运行不同的程序,观察发光二极管的亮灭状态,比较程序的特点,了解汇编语言设计的基本思路和指令应用。三、 思想描述流程图流程图:开始立即数 00H 送 P1 口,点亮 8 个发光二极管延时立即数 0FFH 送 P1 口,熄灭 8 个发光二极管延时结束;-;程序:所有发光二极管不停地闪动;- -LED_PORTEQUP1ORG0000H;程序从地址 0000H 开始存放LJMPSTARTORG0100HSTART:CL

7、REA;关闭所有中断MOVLED_PORT,#00H ;点亮所有发光二极管LCALL DELAY;延时MOVLED_PORT,#0FFH;灭掉所有发光二极管LCALL DELAYSJMPSTART;重复闪动DELAY:MOVR3,#7FH;延时子程序DEL2:MOVR4,#0FFHDEL1:NOPDJNZR4,DEL1DJNZR3,DEL2开始读 P3.4 的脚P3.4 接地8 个 LED交叉亮灭点亮 8 个 LED结束程序流程图RETEND;-;程序:用于关控制发二极管的显示方式;-LED_PORTEQUP1ORG0000HLJMPSTARTORG0100HSTART:CLREA;关闭所有中

8、断MOVP3,#11111111B;使 P3 口锁存器置位MOVA,P3;读 P3 口引脚线信号ANLA,#00010000B;逻辑与操作,屏蔽掉无关位JZDDPING;判断 P3.4 是否接地,若是,跳转到 DDPING 执行MOVLED_PORT,#00H;否则,P3.4 高电平,点亮所有发光二极管SJMPSTARTDDPING:MOVLED_PORT,#55H;P3.4 接地,发光二极管交叉亮灭SJMPSTARTEND1234D+5VD1R11Kx8D1D2U1D31816141297531Y11Y21Y31Y42Y12Y22Y32Y41A11A21A31A42A12A22A32A41G

9、2G74LS240246811131517119123456781312151431D8+5VC1R25.1kB74ALS0012K1324574ALS00U3B61R35.1k30pFG1C230pFU3A3MCU8052U2P1.0/TP1.1/TP1.2P1.3P1.4P1.5P1.6P1.7P3.3/INT1P3.2INT0P3.5/T1P3.4/T0EA/VPXLAT1XLAT2RESETP3.7/RDP3.6/WRP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0P2.1P2.2P2.3P2.4P

10、2.5P2.6P2.7P3.0/RXDP3.1/TXDALE/PPSEN3938373635343332212223242526272810113029BCD49 8 7 6 5 4 3 2CD5D6D711.0592M191891716ATitleANumberRevisionSizeA4Date:File:1232-Aug-2004E:JZV2.ddbSheet ofDrawn By :4实验六实验六 P3 P3 口输入口输入 P1P1 口输出实验口输出实验一、一、 实验目的实验目的 P3 口输入 P1 口输出,实现 I/O 控制。二、二、 实验要求实验要求 撰写实验报告,给出输入输出实现

11、方式,画出实验原理图,给出程序流程及实现的全部代码。三、三、 思想描述:思想描述:系统板上硬件连线系统板上硬件连线(1把“单片机系统”区域中的 P0.0P0.7 端口用 8 芯排线连接到“动态静态数码显示模块”区域中的 ah 端口上;要求:P0.0 对应着 a,P0.1 对应着 b,P0.7 对应着 h。(2把“单片机系统”区域中的 P2.0 端口用 8 芯排线连接到“动态数码显示模块”区域中的任一个公共端上。实验原理实验原理AT89S51单片机的内部 16 位定时/计数器是一个可编程定时/计数器,它既可以工作在 13 位定时方式,也可以工作在 16 位定时方式和 8 位定时方式。只要通过设置

12、特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON 特殊功能寄存器来完成的。现在我们选择 16 位定时工作方式,对于 T0 来说,最大定时也只有 65536us,即 65.536ms,无法达到我们所需要的 1 秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0 的最大定时为 50ms,即要定时1 秒需要经过 20 次的 50ms 的定时。对于这20 次我们就可以采用软件的方法来统计了。因此,我们设定 TMOD00000001B,即 TMOD01H下面我们要给 T0 定时/计数器的 TH0,TL0 装入预置初值,通过下面的公式可以计算出TH0(21650

13、000)/256TL0(21650000)MOD256当 T0 在工作的时候,我们如何得知 50ms 的定时时间已到,这回我们通过检测 TCON 特殊功能寄存器中的 TF0 标志位,如果 TF01 表示定时时间已到。实验结果实验结果汇编源程序(查询法)汇编源程序(查询法)SECONDEQU 30HTCOUNTEQU 31HORG 00HSTART:SETB P2.0MOV SECOND,#00HMOV TCOUNT,#00HMOV TMOD,#01HMOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256SETB TR0DISP:MO

14、V A,SECONDANL A,#0FHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AWAIT:JNB TF0,WAITCLR TF0MOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256INC TCOUNTMOV A,TCOUNTCJNE A,#20,NEXTMOV TCOUNT,#00HINC SECONDMOV A,SECONDCJNE A,#60,NEXMOV SECOND,#00HNEX:LJMP DISPNEXT:LJMP WAITTABLE:DB 3FH,06H,5BH,4FH,66H,6DH

15、,7DH,07H,7FH,6FHEND汇编源程序(中断法)汇编源程序(中断法)SECONDEQU 30HTCOUNTEQU 31HORG 00HLJMP STARTORG 0BHLJMP INT0XSTART:SETB P2.0MOV SECOND,#00HMOV A,SECONDANL A,#0FHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV TCOUNT,#00HMOV TMOD,#01HMOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256SETB TR0SETB ET0SETB EASJMP

16、 $INT0X:MOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256INC TCOUNTMOV A,TCOUNTCJNE A,#20,NEXTMOV TCOUNT,#00HINC SECONDNEXT:TABLE:MOV A,SECONDANL A,#0FHMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ARETIDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND实验实验 7 7 外部中断实验外部中断实验一、 实验目的实验目的 中断实验输出控制,学习中断程序设计方法,理

17、解中断机制理解下降沿中断和低电平中断的区别。二、 实验要求实验要求 编写主程序 实现系统的初始化,若有不同的初始化方式,应有状态指示;编写中断服务程序,服务程序操作以能明确判断发生一次中断为准,且有声光指示作为人机界面。实验前必须认真复习中断相关内容,并在实验报告上写出预习报告,给出实验方案,经过实验指导教师检查合格后,方可进行实验。实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。实验原理用 8051 单片机设计一交通信号灯模拟控制系统,能够完成正常情况下的轮流放行以及特殊情况和紧急情况下的红绿灯控制1掌握单片机中断系统、定时/计数器的编程应用。2通过对交通灯控制程序的编写

18、与调试,掌握中断程序的结构。3正常情况下 A、B 道(A、B 道交叉组成十字路口,A 是主道,B 是支道)轮流放行,A 道放行 1 分钟(其中 5 秒用于警告) ,B 道放行 30 秒(其中 5 秒用于警告) 。4一道有车而另一道无车时,使有车车道放行,K5 键按下表示 A 道有车,K1 键按下表示 B 道有车。5K9 键按下表示有紧急车辆通过时,A、B 道均为红灯。控制码表P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0(空)(空)B 线B 线B 线A 线A 线A 线绿灯黄灯红灯绿灯黄灯红灯11111111110111100011011110111100控制码(P1 口数据)

19、F3HF5HDEHEEH状态说明A 线放行,B 线禁止A 线警告,B 线禁止A 线禁止,B 线放行A 线禁止,B 线警告(二)(二) 实验连线表实验连线表连接 1连接 2连接 3连接 4连接 5单片机P1.0-P1.5INT0T0T1INT1发光二极管L0-L5按键KR1KR2KR3(三)实验结果(三)实验结果主程序开始初始化一道有车、一道无车时的中断服务程序(INT1)中断响应关中断保护现场紧急情况时的中断服务程序(INT0)中断响应保护现场A红灯、B红灯延时20sA绿灯、B红灯开中断延时55sA绿灯闪烁3次A黄灯、B红灯延时2sA红灯、B绿灯延时5s延时25s关中断B绿灯闪烁3次恢复现场B

20、黄灯、A红灯开中断延时2s返回A道有车吗NNB道有车吗恢复现场返回YA绿灯、B红灯YA红灯、B绿灯交通信号灯模拟控制系统程序流程图程序:MAIN:BANK0_REGEQU 00H ;选择第 0 组寄存器BANK1_REGEQU 08H ;选择第 1 组寄存器BANK2_REGEQU 10H ;选择第 2 组寄存器BANK3_REGEQU 18H ;选择第 3 组寄存器ORG 0000HLJMPMAIN;指向主程序ORG 0003HLJMPEMERG;指向紧急车辆出现中断程序 外部中断 0ORG 0013HLJMPONEBUSY;指向一道有车另一道无车中断程序 外部中断 1ORG 0100HMO

21、V PSW,#BANK0_REGMOV SP,#0DFHSETBPX0MOV TCON,#00HMOV TMOD,#10HMOV IE,#85H;置外部中断 0 为高优先级中断;置外部中断 0,1 为电平触发;置定时器 1 为方式 1;开 CPU 中断,开外中断 0,1 中断DISP:MOVP1,#0F3H;A 绿灯放行,B 红灯禁止MOV R2,#6EH;置 0.5 秒循环次数DISP1:LCALLDELAY;调用 0.5 秒延时子程序DJNZR2,DISP1;55 秒不到继续循环MOVR2,#06;置 A 绿灯闪烁循环次数WARN1:CPL P1.2;A 绿灯闪烁LCALLDELAYDJN

22、ZR2,WARN1;闪烁次数未到继续循环MOVP1,#0F5H;A 黄灯警告,B 红灯禁止MOV R2,#04HYEL1:LCALLDELAYDJNZR2,YEL1;2 秒未到继续循环MOV P1,#0DEH;A 红灯,B 绿灯MOV R2,#32HDISP2:LCALLDELAYDJNZR2,DISP2;25 秒未到继续循环MOV R2,#06HWARN2:CPL P1.5;B 绿灯闪烁LCALLDELAYDJNZR2,WARN2MOV P1,#0EEH;A 红灯,B 黄灯MOV R2,#04HYEL2:LCALLDELAYDJNZR2,YEL2LJMPDISP;循环执行主程序;-;紧急情况

23、中断子程序;-EMERG:PUSHP1;P1 口数据压栈PUSH03H;R3 寄存器压栈PUSHTH1;TH1 压栈PUSHTL1;TL1 压栈MOV P1,#0F6H;A,B 道均为红灯MOV R5,#28H;置 0.5 秒循环初值DELAY0:LCALLDELAYDJNZR5,DELAY0;20 秒未到继续循环POP TL1;弹栈恢复现场POP TH1POP 03HPOP P1RETI;返回主程序;-;路有车一路无车中断子程序ONEBUSY;-ONEBUSY:CLR EA;关中断PUSHP1;压栈PUSH03HPUSHTH1PUSHTL1SETBEA;开中断JNB P3.4,BP;A 道无

24、车转向MOV P1,#0F3H;A 绿灯,B 红灯SJMPDELAY1;转向 5 秒延时BP:JNB P3.5,EXIT;B 道无车退出中断MOV P1,#0DEH;A 红灯,B 绿灯DELAY1:MOV R6,#0AH;置 0.5 秒循环初值NEXT:LCALLDELAYDJNZR6,NEXT;5 秒未到继续循环EXIT:CLR EAPOP TL1;弹栈恢复现场POP TH1POP 03HPOP P1SETBEARETI;-;0.5S 延时子程序;-DELAY:MOV R3,#0AHMOV TH1,#3CHMOV TL1,#0B0HSETBTR1LP1:JBC TF1,LP2SJMPLP1L

25、P2:MOV TH1,#3CHMOV TL1,#0B0HDJNZR3,LP1RETEND实验八实验八 定时器定时器/ /计数器应用试验计数器应用试验一、一、 实验目的实验目的 掌握定时器/计数器编程方法,掌握相关寄存器的初始化及其意义;理解定时器 /计数器的本质,掌握定时器/计数器应用的两种方法:查询和中断。二、二、 实验要求实验要求 利用定时器实现一秒定时,或计数外部脉冲,分别采用查询和中断两种方式实现,加深对中断的理解加强对相关寄存器各个位的灵活应用能力。人机界面方案自行设计。实验前必须认真复习定时计数器相关内容,并在实验报告上写出定时计数器的初始化步骤,给出人机界面实现方案,经过实验指导

26、教师检查合格后,方可进行试验。实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。实验连线表实验连线表单片机+5V/GNDP1.0P1.1GNDP1.2P1.3P1.4P1.5(三)程序流程图(三)程序流程图MC8+5V/GNDSCLSDA按键+5V/GNDKC1KR1KR2KR3闹钟修改功能子程序 FTION1 流程框图主程序 MAIN 流程框图程序清单:程序清单:;-;-数字时钟制作-;-BANK0_REGEQU 00H ;选择第 0 组寄存器BANK1_REGEQU 08H ;选择第 1 组寄存器BANK2_REGEQU 10H ;选择第 2 组寄存器BANK3_REGE

27、QU 18H ;选择第 3 组寄存器LED_MAX_BITSEQU 06H ;LED 最大位数LED_SCLEQU P1.0LED_SDAEQU P1.1HD_K0EQU P1.2HD_K1EQU P1.3HD_K2EQU P1.4HD_CBPEQU P1.5K0_FLAGEQU 00HK1_FLAGEQU 01HK2_FLAGEQU 02HSEC_FLAGEQU 03H;定义各标识位符号地址MIN_FLAGEQU 04HHOUR_FLAGEQU 05HRMIN_FLAGEQU 06HRHOUR_FLAGEQU 07HRTIM_FLAGEQU 08HARM_FLAGEQU 09H;是否设定闹钟

28、标识TIMDATAEQU 30H;时钟修改记忆单元RTIMDATAEQU 31H;闹钟修改记忆单元清零MSEC1EQU 32HMSEC2EQU 33HHOUREQU 34HMINEQU 35HSECEQU 36HRHOUREQU 37HRMINEQU 38HRSECEQU 39HCOUNTEQU 3AHLED_DIS_PTR EQU 3BHORG 0000HLJMPMAINORG 000BHLJMPTIMER_INT;定时器中断服务程序ORG 0100HMAIN:CLR EAMOV PSW,#BANK0_REGMOV SP,#0DFHMOV R0,#20HMOV R7,#80H-20HLCAL

29、LPUB_CLEAR_RAM1;清 0RAM 单元 LCALLLED_CLR MOV LED_DIS_PTR,#HOURLCALLLED_DISP_DATA MOV TMOD,#02H;定时器 T0 方式 2, MOV TL0,#06H;定时 250us 初始值 MOV TH0,#06H SETBEA;中断允许 SETBET0 SETBTR0;启动定时器BEGIN:LCALLKEY_TEST;调用判别键入测试程序 JCRETEST;有键输入则转去抖程序 JNB ARM_FLAG,BEGIN;判别闹钟设定标识位,未设定则返回 LCALLALARM;调闹钟程序LJMPBEGIN;返回RETEST:

30、LCALLKEY_SCANJBK0_FLAG,PRO_K0; 判别是否时钟修改功能键JBK1_FLAG,PRO_K1; 判别是否闹钟修改功能键JBK2_FLAG,PRO_K2; 判别是否加 1 功能键SJMPBEGINPRO_K0:LCALLFTION0; 是时钟参数修改功能键则调用时钟修改程序SJMPBEGINPRO_K1:LCALLFTION1; 是闹钟参数修改功能键则调用闹钟设定程序SJMPBEGINPRO_K2:LCALLCUM; 是加 1 功能键则调用加1 修改程序SJMPBEGIN;-;时钟参数修改子程序 FTION0;功能:根据时钟修改功能键按下的次数;分别将时钟修改标识位SEC

31、BIT, MIN_FLAG,HOURBIT置 1;入口:TIMDAT;出口:TIMDAT;-FTION0:JBRMIN_FLAG,BACK_BJBRHOUR_FLAG,BACK_B;当正在设置闹钟不能设置时间,需先结束闹钟设置状态CLR TR0;关定时器CLR SEC_FLAG;时钟秒标识位清零CLR MIN_FLAG;时钟分标识位清零CLR HOUR_FLAG;时钟小时标识位清零MOV LED_DIS_PTR,#HOUR;将时钟小时单元设为显示首地址MOV RTIMDATA,#00H;清闹钟修改位置标识记录INC TIMDATA;将时钟修改记录值加 1MOV A,TIMDATACJNEA,#

32、01H,TW0;若记录值为 1 则将时钟秒修改标识置1SETBSEC_FLAG;时钟秒标识位置 1SJMPBACK_CTW0:CJNEA,#02H,THREE0;若记录值为 2 则将时钟分修改标识置1SETBMIN_FLAG;时钟分标识位置 1SJMPBACK_CTHREE0:CJNEA,#03H,BACK_A;若记录值为 3 则将时钟小时修改标识置1SETBHOUR_FLAG;时钟小时标识位置 1SJMPBACK_CBACK_A:MOV TIMDATA,#00H;若按 4 次则清时钟单元修改位置记录SETBTR0;定时器重新启动BACK_B:RETBACK_C:LCALLLED_DISP_D

33、ATARET;-;闹钟参数修改功能键设定子程序FTION1;功能:根据闹钟修改功能键按下的次数;分别将闹钟修改标识位RMINBIT ,RHOURBIT置 1;入口:RTIMDAT;出口:RTIMDAT,ARM_FLAG,B;-FTION1:JBSEC_FLAG,FTION1_AJBMIN_FLAG,FTION1_AJBHOUR_FLAG,FTION1_A;当处于设置时间状态时不能设置闹钟,需先结束时间设置状态CLR RMIN_FLAG;将闹钟分单元修改标识位CLR RHOUR_FLAG;将闹钟小时单元修改标识位清零MOV LED_DIS_PTR,#RHOUR;将闹钟单元地址设为显示首地址MOV

34、 TIMDATA,#00HINC RTIMDATA;将闹钟修改记录值加 1MOV A,RTIMDATACJNEA,#01H,TOW1SETBRMIN_FLAG;若记录值为 1 则将闹钟分单元修改标识位LJMPFTION1_B;置 1TOW1:CJNEA,#02H,THREE1SETBRHOUR_FLAG; 若记录值为 2,将闹钟小时单元修改标识位置1LJMPFTION1_BTHREE1:SETBARM_FLAG;F0 标识位为 1 表示闹钟已设定MOV LED_DIS_PTR,#HOUR;恢复时钟显示单元首地址MOV RTIMDATA,#00H;将闹钟修改记录值清零FTION1_A:RETFT

35、ION1_B:LCALLLED_DISP_DATARET;-;加 1 键修改子程序 CUM;功能:根据时钟和闹钟修改标识位的状态,将时钟或闹钟对应 RAM 内容+1;入口:SEC_FLAG, MIN_FLAG ,HOUR_FLAG,RSECBIT, RMIN_FLAG ,RHOUR_FLAG;-CUM:JNB SEC_FLAG,CUM0;若时钟秒修改标识位为1 则秒单元内MOV A,SEC;容加 1ADD A,#01HDAAMOV SEC,ACJNEA,#60H,CUMENDMOV SEC,#00HLJMPCUMENDCUM0:JNB MIN_FLAG,CUM1;若时钟分修改标识位为1,则分单

36、元MOV A,MIN;内容加 1ADD A,#01HDAAMOV MIN,ACJNEA,#60H,CUMENDMOV MIN,#00HLJMPCUMENDCUM1:JNB HOUR_FLAG,CUM2;若时钟小时修改标识位为1,则小时MOV A,HOUR;单元内容加 1ADDA,#01HDA AMOV HOUR,ACJNEA,#24H,CUMENDMOV HOUR,#00HLJMPCUMENDCUM2:JNB RMIN_FLAG,CUM3;若闹钟分修改标识位为1,则分单元MOV A,RMIN;内容加 1ADD A,#01HDAAMOV RMIN,ACJNEA,#60H,CUMENDMOV RM

37、IN,#00HLJMPCUMENDCUM3:JNB RHOUR_FLAG,CUMEND;若闹钟小时修改标识位为1,则小MOV A,RHOUR;时单元内容加 1ADD A,#01HDAAMOV RHOUR,ACJNEA,#24H,CUMENDMOV RHOUR,#00HCUMEND:LCALLLED_DISP_DATARET;-;闹钟判断与启动子程序ALARM;功能:判断闹钟是否设定,控制闹钟的启,停;入口:MIN ,RMIN ,HOUR ,RHOUR;出口:HD_BP,ARM_FLAG;-ALARM:MOV A,RMINCJNEA,MIN,DONT0;比较分单元内容,若相同则继续比较小时单MO

38、V A,RHOUR;元内容,否则返回CJNEA,HOUR,DONT0CLR HD_CBP;启动闹钟SETBRTIM_FLAG;设置闹钟计时标时,时钟开始 10 秒计时DONT0:MOV A,COUNT;取闹钟保持计时时间CJNEA,#10,DONT;判断闹钟保持 10 秒时间到否MOV COUNT,#00H;清除闹钟保持 10 秒计时SETBHD_CBP;清除闹钟CLR ARM_FLAG;清闹钟标识,取消闹钟设置CLR RTIM_FLAG;清闹钟计时标识,DONT:RET;-;时钟修正中断服务子程序;功能:通过定时器中断,自动修改时钟参数;入口:MSEC1 ,MSEC2,SEC,MIN,HOU

39、R;出口:MSEC1 ,MSEC2,SEC,MIN,HOUR;-TIMER_INT:CLR EA; 关中断PUSHPSW; 保护现场PUSHACCMOV PSW,#BANK3_REGINC MSEC1MOV A,MSEC1CJNEA,#28H,TIMER_INT_EXIT;到 10 毫秒否MOV MSEC1,#00HINC MSEC2MOV A,MSEC2CJNEA,#64H,TIMER_INT_EXIT;到 1 秒否MOV MSEC2,#00HJNB RTIM_FLAG,TIMER_INT_A;由标识位判别闹钟启动否INC COUNTTIMER_INT_A:MOV A,SECADD A,#0

40、1H;时钟秒单元内容加 1DAAMOV SEC,ACJNEA,#60H,TIMER_INT_B;到 1 分钟否MOV SEC,#00HMOV A,MINADD A,#01H;分单元内容加 1DAAMOV MIN,ACJNEA,#60H,TIMER_INT_B;到 1 小时否MOV MIN,#00HMOVA,HOURADD A,#01H;小时单元内容加 1DA AMOV HOUR,ACJNEA,#24H,TIMER_INT_B;到 24 小时否MOV HOUR,#00HTIMER_INT_B:LCALLLED_DISP_DATATIMER_INT_EXIT:POPACC;恢复现场POP PSWS

41、ETBEA;开中断RETI;中断返回;-;测键入子程序;功能:判断是否有键输入;入口:按键;出口:A;-KEY_TEST:JNB P1.2,KEY_TEST_OKJNB P1.3,KEY_TEST_OKJNB P1.4,KEY_TEST_OKCLR CRETKEY_TEST_OK:SETBCRET;-;键盘扫描程序;-KEY_SCAN:CLR K0_FLAGCLR K1_FLAGCLR K2_FLAGJNB P1.2,KEY_SCAN_K0JNB P1.3,KEY_SCAN_K1JNB P1.4,KEY_SCAN_K2SJMPKEY_SCAN_ENDKEY_SCAN_K0:SETBK0_FLA

42、GJNB P1.2,$SJMPKEY_SCAN_ENDKEY_SCAN_K1:SETBK1_FLAGJNB P1.3,$SJMPKEY_SCAN_ENDKEY_SCAN_K2:SETBK2_FLAGJNB P1.4,$SJMPKEY_SCAN_ENDKEY_SCAN_END:RET;-;发送一字节数据;入口:ACC;-LED_DISP_BYTE:PUSHACCCLR LED_SCLMOV R7,#8LED_DISP_BYTE1:RLC AMOV LED_SDA,CNOPNOPSETBLED_SCLNOPNOPCLR LED_SCLDJNZR7,LED_DISP_BYTE1POP ACCRET;

43、-;发送 LED_MAX_BIT 字节;入口:LED_DIS_PTR:起始地址;-LED_DISP_DATA:PUSHPSWPUSHACCPUSHDPHPUSHDPLMOV PSW,#BANK2_REGMOV A,LED_DIS_PTRADD A,#LED_MAX_BITS/2-1MOV R0,AMOV R6,#3MOV DPTR,#DIS_TABLED_DISP_DATA_A:MOV A,R0ANL A,#0FHMOVCA,A+DPTRCJNER6,#3,LED_DISP_DATA_B;是在显示秒吗JNB SEC_FLAG,LED_DISP_DATA_DANL A,#07FH;设置显示小数点

44、 指示操作位置SJMPLED_DISP_DATA_DLED_DISP_DATA_B:CJNER6,#2,LED_DISP_DATA_C;是在显示分吗ANL A,#07FHJBMIN_FLAG,LED_DISP_DATA_DJBRMIN_FLAG,LED_DISP_DATA_DORL A,#80HSJMPLED_DISP_DATA_DLED_DISP_DATA_C:ANL A,#07FHJBHOUR_FLAG,LED_DISP_DATA_DJBRHOUR_FLAG,LED_DISP_DATA_DORL A,#80HLED_DISP_DATA_D:LCALLLED_DISP_BYTEMOV A,R

45、0SWAPAANL A,#0FHMOVCA,A+DPTRLCALLLED_DISP_BYTEDEC R0DJNZR6,LED_DISP_DATA_APOP DPLPOP DPHPOP ACCPOP PSWRET;-;清除 LED 上的显示内容;-LED_CLR:PUSHPSWPUSHACCPUSHDPHPUSHDPLMOV PSW,#BANK2_REGMOV R6,#6LED_CLR_A:MOV A,#0FFHLCALLLED_DISP_BYTEDJNZR6,LED_CLR_APOP DPLPOP DPHPOP ACCPOP PSWRET;-DIS_TAB:;字形表DB0C0H,0F9H,0A

46、4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ;共阳极 LEDNOP9:NOPNOPNOPNOPNOPNOPNOPRET;-;清除指定的 RAM 单元;入口:R0:源地址 R7:长度;-PUB_CLEAR_RAM1:CJNER7,#0,PUB_CLEAR_RAM1_1SJMPPUB_CLEAR_RAM1_EPUB_CLEAR_RAM1_1:MOVR0,#0INCR0DJNZR7,PUB_CLEAR_RAM1_1PUB_CLEAR_RAM1_E:RET END实验九实验九 ADAD 转换实验转换实验一、 实验目的实

47、验目的 (1)掌握AD 转换与单片机接口的方法; (2)了解AD 芯片 0809 转换性能及编程方法;(3)通过实验了解单片机如何进行数据采集二、 实验内容实验内容 利用实验系统上的 0809 做 AD 转换器, 实验系统上的电位器提供模拟量输入, 编制程序,将模拟量转换成数字,通过数码管显示出来。三、三、 实验接线图实验接线图四、四、 试验程序框图试验程序框图开始0809 初始化显示0809 通道采样五、 实验步骤实验步骤 把 0809 的零通道 INT0 用插针接至 AOUT1 孔,CS4 接 8000H 孔,JX0 接 JX6,运行程序,数码管上显示 0809.XX,后二位显示当前采集的

48、电压转换的数字量,调节W1,该而为将随着电压变化而相应变化。六、 思考思考 修改程序,用其他通道轮流采样显示七、 程序清单程序清单文件名:HW09.ASMORG 0000HLJMP SE11ORG 05A0HSE11:MOV SP,#53HMOV A,#43HMOV DPTR,#0FF20HMOVX DPTR,AMOV 7EH,#00HMOV 7DH,#08HMOV 7CH,#00HMOV 7BH,#09HMOV 7AH,#10HMOV 79H,#10HLO18:LCALL SSEEMOV A,#00HMOV DPTR,#8000HMOVX DPTR,AMOV R7,#0FFHLO17:DJN

49、Z R7,LO17MOVX A,DPTRMOV R0,#79HLCALL PTDSSJMP LO18ORG 05D0HPTDS:MOV R1,AACALL PTDS1MOV A,R1SWAP APTSD1:ANL A,#0FHMOV R0,AINC R0RETORG 0D50HSSEE:SETB RS1MOV R5,#05HSSE2:MOV 30H,#20HMOV 31H,#7EHMOV R7,#06HSSE1:MOV R1,#21HMOV A,30HCLP AMOVX R1,AMOV R0,31HMOV A,R0MOV DPTR,#DDFFMOVC A,A+DPTRMOV R1,#22HMO

50、VX R1,AMOV A,30HRR AMOV 30H,ADEC 31HMOV A,#0FFHMOVX R1,ADJNZ R7,SSE1DJNZ R5,SSE2CLR RS1RETDDFF:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEHEND实验十实验十 DADA 转换转换一、 实验目的实验目的 (1)了解 DA 转换与单片机的接口方法; (2)了解 DA 转换芯片 0832 的性能及编程方法; (3)了解单片机系统中扩展DA 转换芯片的基本方法。二、 实

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com