单片机应用技术实验指导书_S_程序参考
单片机实验指导书

单片机实验指导书一、实验介绍单片机是一种集成电路,能够完成各种控制和计算任务。
本实验指导书将引导您进行单片机实验,以帮助您了解单片机的基本原理和应用。
在本实验中,您将学习如何搭建实验环境、编写程序以及进行各种实验操作。
二、实验准备1. 实验设备和材料:- 单片机开发板- USB数据线- 适配器- 数字电路元件(如LED、电位器等)2. 软件准备:- 单片机开发软件(如Keil、IAR EWARM等)- 编程软件(如C语言编辑器)- USB驱动程序三、实验步骤1. 搭建实验环境:- 将USB数据线连接单片机开发板和计算机。
- 通过适配器给单片机开发板供电。
- 检查驱动程序是否正确安装。
2. 编写程序:- 打开单片机开发软件,并创建一个新的工程。
- 选择适当的单片机型号和编程语言。
- 编写程序代码,实现所需功能。
- 编译程序并下载到单片机开发板。
3. 实验操作:- 根据实验要求连接相应的电路元件。
- 调试程序,确保程序能正确运行。
- 运行实验并观察结果。
四、实验注意事项1. 请确保您具备基本的电路和编程知识。
2. 在操作实验设备和元件时,请小心谨慎,避免发生触电等事故。
3. 如果遇到问题,请及时咨询实验指导人员或相关专家。
五、实验示例以下是一个简单的实验示例,用于演示如何控制LED灯的亮度:实验电路连接:将一个LED灯连接至单片机开发板的一个GPIO口。
程序代码:#include <reg51.h>sbit LED = P1^0;void delay(unsigned int time){unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<120;j++);}void main(){while(1){LED = 1; // 点亮LEDdelay(200); // 延时200msLED = 0; // 熄灭LEDdelay(200); // 延时200ms}}六、实验总结通过本次实验,我们学习了搭建实验环境、编写程序以及进行单片机实验操作的基本步骤和注意事项。
单片机实验指导书

单片机原理及应用实验指导书殷爱华南京理工大学实验一62256 SRAM自检一、实验目的:1.熟悉仿真器的使用。
2.了解教学实验系统的结构和地址译码方式。
3.通过62256自检程序实验,掌握数据存储器检测方法。
二、实验要求1.实验内容与方法编写自检程序,要求通过循环程序逐个单元检测62256芯片。
分别由低地址单元到高地址单元写入55H和AAH,并读出后进行比较,以判断存储器单元是否工作正常,如果检测结果正常,则点亮一个发光二极管,若检测结果不正常,则使该二极管以闪烁的方式进行指示。
62256RAM的寻址范围为0000H ~7FFFH 。
2.要求①按实验内容自编程序,并输入计算机进行仿真调试。
②完成I/O口某一位的输出与发光二极管电路的连接。
③注意实验设备、电源的使用安全。
④调试完毕观察发光二极管的工作情况是否满足设计要求。
⑤提交试验报告。
三、注意事项1. 不带电操作。
2. 不要随便用手触摸电路板及元器件。
3. 接插电路时务必注意元件正负方向,以防止元件被击穿。
四、实验器材与设备:1. PC计算机一台2. 单片机教学实验开发系统一套3. 实验器材若干五、实验原理:六、实验步骤:七、程序功能要求:八、程序流程图:九、实验源程序并附简单说明:十、实验感想及建议实验二8255可编程并行口输入/输出一、实验目的:1.熟悉仿真器的使用。
2.了解教学实验系统的结构和地址译码方式。
3.掌握8255可编程并行I/O扩展口编程。
二、实验要求1.实验内容与方法编写8255并行输入输出程序,编写8255按位置位/复位程序。
要求8255工作于基本输入/输出方式,PA口和PC口的高4位为输出口,PB口和PC口的低4位为输入口。
用发光二极管显示工作是否正常。
8255的PA口地址—F228H,PB口地址—F229H,PC口地址—F22AH,控制寄存器地址—F22BH。
2.要求①按实验内容自编程序,并输入计算机进行仿真调试。
②完成8255并行输出口与输入口的对应电路连接。
单片机实验指导书(PROTUES实用)

单片机原理与接口技术实验指导书2009.10.28目录软件部分 (1)实验一赋值程序 (1)一实验目的 (1)二实验内容 (1)三程序流程图 (1)四实验步骤 (1)五参考程序 (1)实验二数据区传送程序 (3)一实验目的 (3)二实验内容 (3)三程序流程图 (3)四实验步骤 (3)五参考程序 (3)硬件部分 (5)实验一P1口亮灯实验 (5)一实验目的 (5)二实验内容 (5)三程序流程图 (5)四仿真电路 (6)五硬件实现电路 (6)六实验步骤 (7)七参考程序 (7)实验二P1口转弯灯实验 (8)一实验目的 (8)二实验内容 (8)三程序流程图 (8)四仿真电路 (8)五实验电路 (9)六实验步骤 (9)七参考程序 (9)附录一Keil Vison2使用入门 (11)附录二Protues使用入门 (13)附录三KeilC与Proteus连接调试 (15)软件部分软件实验中,涉及外部数据存储器扩展寻址操作,须按下图连接实验线路。
说明:1 将存储器单元的D0-D7与数据总线单元D0-D7相连;存储器单元的A0-A12与地址总线单元A0-A12相连。
2 存储器单元的WE/PGM与六位LED左下方单元的WR或IOWR相连。
3 存储器单元的CS1与六位LED右下方单元A15相连。
4 存储器单元的OE与六位LED左下方单元的RD或IORD相连实验一赋值程序一实验目的1 熟悉汇编指令2 掌握汇编语言程序设计的一般方法二实验内容编写程序实现存储块(2000H---20FFH)的赋值操作(如全为0FFH)。
三程序流程图图1 流程图四实验步骤1 编写程序并调试。
2 在实验箱上运行程序,并查看对应存储器和寄存器的内容。
五参考程序ORG 0000HLJMP MAINORG 0030HMAIN: MOV R0,#00HMOV DPTR,#2000HMOV A,#0FFHLOOP0:MOVX @DPTR,AINC DPTRINC R0CJNE R0,#00H,LOOP0;判断赋值是否完成LOOP1:SJMP LOOP1END实验二数据区传送程序一实验目的1 熟悉汇编指令2 掌握汇编语言程序设计的一般方法二实验内容编写程序实现内存块的移动操作(将20H单元开始的64字节数据移动到3000H开始的存储区)。
单片机原理应用实验指导书

《单片机原理与应用》课程实验指导书电子、机电及电气项目与自动化专业适用吴茂屈莉莉王飞编佛山科学技术学院二00 九年十月前言以往我校的单片机实验教案通常是使用启东DAIS 系列单片机微机仿真实验系统进行单片机实验教案的,DAIS 系统可以做二十多项实验,系统机构十分复杂,功能非常强大,但是在使用过程中也发现了一些不足的地方那个: 厂家为了技术保密,把核心电路都屏蔽了,我们不能了解实验系统的工作原理,另外系统庞大,不方便学生带回宿舍实验,不方便学生课外学习。
根据我校学生对单片机课程学习的需求, 我们在参考其他公司的产品的基础上,结合课程的实际情况,开发了适合学生入门学习的单片机学习板,FD-51 学习板,该学习板设置了包括LED数码管、LCD1602液晶、AD\DA转换器件等单元电路,可以做几十个单片机实验,而且本实验板我们是以配件的形式提供给学生,让学生自己焊接调试线路板。
学生不但可以学习软件编程技术,还可以学习硬件焊接及调试技术,可以更好地锻炼学生的动手操作能力。
目录系统介绍 (2)软件实验:实验一清零程序............. (4)实验二拆字程序.................... .. (5)实验三拼字程序.................... .. (5)实验四数据区传送子程序 (6)实验五查找相同数个数 (6)硬件实验:实验A 工业顺顺序控制 (7)实验B 简单IO口扩展实验 (8)实验一P1 口输出流水灯实验 (11)实验二P1 口输出交通灯实验 (11)实验三八段数码管显示实验 (12)实验四键盘实验.................. . (12)实验五遥控解码实验 ............. .. (12)实验六计数器实验..................... .. (13)实验七继电器控制实验 .................... (13)实验八定时器实验 (14)实验九单片机串行口通讯实验 (14)实验十电子时钟 (14)实验十一外部中断实验<急救车与交通灯) (15)实验十二AT24C02读写实验...... .......... . (15)实验十三93C46读写实验....... ........... (16)实验十四LCD1602字符型液晶控制显示实验 (16)实验十五LCD12864点阵型液晶控制显示实验 (17)实验十六A/D转换(数字电压表>实验 (17)实验十七D/A转换(波形发生器>实验 (18)实验十八计算机温度数据采集与处理 ............... . (19)系统介绍一、FD-51单片机学习板简介为了适应我校单片机课程教案的需要,我们在参考其他厂家学习板的基础上,再根据我校单片机课程教案大纲的要求,基于简单、使用的原则,开发了FD-51 单片机实验板。
单片机实验指导书

单片机实验指导书近年来,单片机技术的发展十分迅速。
越来越多的工程师和科技爱好者开始接触和学习单片机技术,这促使单片机实验指导书的需求越来越大。
然而,这方面的书籍并不是很多,而且很多都只是简略介绍了一些基础的知识,很难满足读者的需求。
因此,我们有必要撰写一本全面、详实的单片机实验指导书,以供广大读者参考。
一、实验前的准备工作在进行单片机实验之前,需要进行一些准备工作。
首先,应确保实验所需要的单片机、电路板、电路图和元件都准备齐全;其次,应找到合适的实验环境,比如一间安静、干净、通风的实验室;最后,需要特别注意使用电器设备时的安全问题,确保自己和他人的安全。
二、实验的流程和步骤在开始实验之前,需要认真研读实验指导书中的介绍和分析,了解实验的目的、原理和步骤。
然后,按照指导书中的步骤依次进行实验。
实验完成后,应按照要求记录实验数据,并进行分析和归纳总结。
如果有问题需要解决,可以查阅相关的资料和文献,或向老师和同学请教。
三、实验中的注意事项在进行单片机实验时,一定要注意以下几点:首先,要认真选择合适的元件和器材,确保其质量和性能符合要求;其次,要遵守电器设备的使用规范,比如正确连接电源和地线、避免引起短路等;最后,要防止过度使用单片机,以免出现电磁干扰、损坏设备等问题。
四、实验课堂作业单片机实验课堂作业的目的是让学生加深对单片机知识的理解和掌握。
作业内容应与实验内容相密切相关,包括设计实验电路、编写程序、测试运行结果等。
同时,作业应具有一定难度和挑战性,以激发学生的兴趣和创造力。
总之,单片机实验指导书是单片机科技研究和应用的基础。
只有通过认真研读和实践,才能真正掌握单片机技术,应用到实际生产和工程中。
希望我们的实验指导书能够对广大读者有所帮助。
单片机实验指导书

单片机实验指导书第一章实验概述本实验指导书旨在帮助学生掌握单片机基本原理和应用技巧。
通过实验的学习,学生将了解单片机的内部结构,学习单片机的编程方法,并能够用单片机实现简单的控制功能。
第二章实验准备2.1 实验器材准备本实验需要准备以下器材:- 单片机开发板- USB线- 电脑2.2 软件安装在开始实验之前,需要安装以下软件:- Keil C51开发环境- STC单片机系列驱动程序第三章实验步骤3.1 硬件连接将单片机开发板通过USB线连接到电脑上,并确保连接正常。
3.2 软件设置打开Keil C51开发环境,点击菜单栏中的“文件”选项,选择“新建”创建新的工程。
设置工程的名称和保存位置,确定后点击“保存”。
3.3 编写程序在Keil C51开发环境中,编写单片机程序。
首先需要包含相应的头文件,然后编写具体的程序逻辑,实现所需的功能。
3.4 编译和烧录程序在编写完程序后,点击菜单栏中的“编译”选项进行编译。
编译成功后,点击菜单栏中的“下载”选项将程序烧录到单片机开发板中。
3.5 实验验证将程序烧录完毕后,将开发板与外部模块连接,观察实验现象是否符合预期。
第四章实验注意事项4.1 安全注意事项在实验过程中,要注意使用安全电压和电流,避免短路和电击风险。
4.2 实验环境实验需要在安静、整洁的环境中进行,以避免干扰和误操作。
4.3 调试和故障排除如果遇到实验效果不理想或者出现故障的情况,可以参考开发板的说明书进行故障排查和调试。
第五章实验总结通过本次实验,我深入了解了单片机的基本原理和应用技巧。
通过编写程序并实际观察实验现象,我成功掌握了单片机编程的方法和技巧,并能够用单片机实现简单的控制功能。
本次实验还让我意识到了实验中的安全注意事项和环境要求的重要性。
在实验过程中,我严格遵守了安全规定,并在安静整洁的环境中进行操作,确保实验顺利进行。
通过反复实践和调试,我不断提高了自己的实验技巧和问题排查能力。
在遇到故障时,我能够通过检查并参考说明书,准确地找到并解决问题。
单片机技术与应用实验指导书

实验一编译软件熟悉及编程指令练习一、实验目的熟悉单片机仿真开发软件Keil UV2的编程、编译、调试环境。
进一步熟悉MCS-51单片机指令系统。
二、实验仪器微机一台三、实验源程序ORG 0030HMOV A,#02H (A)=MOV SP,#52H (SP)=MOV 51H,#0FFH (51H)=MOV 52H,#0FFH (52H)=POP DPH (DPH)= (SP)=POP DPL (DPH)= (SP)=MOV DPTR, #4000H (DPTR)=RL A (A)=MOV B, A (B)=MOVC A, @A+DPTR (A)=PUSH Acc (SP)= (51H)=MOV A, B (A)=INC A (A)=MOVC A,@A+DPTR (A)=PUSH Acc (SP)= (52H)=RET (PC)= (SP)=ORG 4000HDB 10H,80H,30H,50H,30H,50H四、实验步骤1. 打开WAVE软件,设置仿真器、仿真头、CPU及晶振频率,勾选使用Keil编译器,Keil软件模拟器,生成HEX文件。
2. 新建文件,输入实验程序,保存为*.ASM文件。
3. 汇编,浏览CODE 窗口的指令代码。
4. 调试,采用单步运行,观察CPU窗口和DATA窗口各SFR和RAM的变化,并将每步运行结果写入各指令的后面。
五、实验思考1. PC、DPTR都用于提供地址,其区别是什么。
2.说明RET指令的功能。
实验二定时与中断一、实验目的:掌握定时/计数器、中断初始化程序的设计。
掌握使用定时/计数器的方式1、方式2的编程方法掌握中断的编程方法。
二、实验设备lab6000系列通用微控制器实验系统一台微机一台三、实验硬件电路:四、实验程序设计任务一:使定时器T0 工作于定时工作方式1,编写产生2S的周期方波程序,使P1.0口的发光二极管循环闪亮。
任务二:使定时器T0 工作于计数工作方式2,每按p3.4引脚上的开关6次,P1.0口的发光二极管循环闪亮。
《单片机技术应用》(MCS51)实验指导书

实验一LED控制程序设计一、实验目的:1.掌握单片机单片机学习板和软件的使用。
2.掌握单片机程序的调试方法。
二、实验设备:单片机学习板、PC机三、实验内容:1.掌握C51程序的编辑、汇编、仿真调试的操作。
2.掌握目标程序的下载。
3.P1口输出控制LED的实验。
(1)编写控制8个LED巡回点亮的程#include<reg52.h>#define uint8 unsigned charunsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0,0x55,0x55,0xaa,0xaa};void Delayms(uint8);void main(){unsigned char i;while(1){P1=0xfe; //流水灯右循环for(i=0;i<8;i++){Delayms(100);P1 <<=1;P1 |=0x01;}}}void Delayms(uint8 Tms){uint8 i,j; for( ; Tms > 0; Tms--)for(i=5;i>0;i--)for(j=98;j>0;j--);}(2)改为流水灯效果或其他显示效果,说明方法;(3)修改延时时间并计算具体的时间;(4)自行设计LED点亮效果。
实验二数码管显示程序设计一、实验目的:1.了解七段数码显示数字的原理。
2.掌握数码管显示程序的设计。
二、实验设备:单片机学习板、PC机三、实验内容:1.在4位数码管上显示“1234”。
#include<reg52.h> //包含头文件,对IO进行定义,可以选中后右击,查看里面具体定义。
#define uint8 unsigned charsbit dula=P2^6; //段选信号的锁存器控制sbit wela=P2^7; //位选信号的锁存器控制unsigned char code value[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void Delayms(uint8);void main(){P0=value[1];dula=1;P0=0xfe;//选择第一个数码管wela=1;wela=0;Delayms(3);P0=0xff; //消除串显wela=1;wela=0;P0=value[2];dula=1;dula=0;P0=0xfd;//选择第二个数码管wela=1;wela=0;Delayms(3);P0=0xff; //消除串显wela=1;wela=0;P0=value[3];dula=1;dula=0;P0=0xfb;//选择第三个数码管wela=1;wela=0;Delayms(3);P0=0xff; //消除串显wela=1;wela=0;P0=value[4];dula=1;dula=0;wela=1;wela=0;Delayms(3);P0=0xff;wela=1;wela=0;}void Delayms(uint8 Tms){uint8 i,j;for( ; Tms > 0; Tms--)for(i=5;i>0;i--)for(j=98;j>0;j--);}“12.34”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1 P1口实验(1)查表法控制流水灯;汇编起始地址0000HSJMP MAINORG 0030HMAIN: ;表首址送DPTR LOADTABLE: CLR A;查表CJNE A,#88H, DISPLAYJMP MAINDISPLAY: ;ACC数据送P1口显示CALL DELAYINC DPTRJMP LOADTABLETABLE: ;数据表格DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH ;左移DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;右移DB 88H ;结束码DELAY: MOV R4,#4 ;延时子程序LP1: MOV R5,#255LP2: MOV R6,#255LP3: DJNZ R6,LP3DJNZ R5,LP2DJNZ R4,LP1RETEND(2)位数据的串行输出;汇编起始地址0000HSJMP MAINORG 0030HMAIN: ;移位次数设置;装载初值LOOP: ;将ACC的数据右移到CY中;从P1.0口输出CY中的数据LCALL DELAYDJNZ R7, LOOPJMP MAIN;延时子程序。
;延时机器周期数:。
;fosc=6MHz时,延时时间(ms):。
DELAY: MOV R4,#10LP1: MOV R5,#50LP2: MOV R6,#248NOPLP3: DJNZ R6,LP3DJNZ R5,LP2DJNZ R4,LP1RETEND4.2 外中断实验(1)INT1中断控制LEDORG 0000HMAIN: ;开总中断;开外部中断1;电平触发方式GREEN: CLR P0.0 ;点亮绿色LED D1JMP GREEN ;循环;中断服务子程序段,熄灭绿色发光二极管D1,点亮红色D2;中断服务子程序起始地址EXT1_RED: SETB P0.0 ;熄灭绿色LED D1CLR P0.1 ;点亮红色LED D2DLY2: MOV R3,#5 ;延时D1: MOV R4,#255D2: MOV R5,#255DJNZ R5,$DJNZ R4,D2DJNZ R3,D1SETB P0.1 ;熄灭红色LED D2RETIEND(2)交通灯控制ORG 0000HLJMP MAIN ;转向主程序ORG 0003HLJMP INTRPT0 ;转向紧急车辆中断服务程序ORG 0013HLJMP INTRPT1 ;转向有车车道放行中断服务程序ORG 0030HMAIN: ;置外部中断0为高优先级中断;置外部中断0、1为电平触发;开CPU中断、外部中断0、1中断LOOP: MOV P1,#0F3H ;A道绿灯亮,B道红灯亮MOV R1,#88 ;44s延时的循环次数AP1: LCALL DELAY500 ;调用0.5s延时子程序DJNZ R1,AP1 ;44s不到,继续循环MOV R1,#6 ;3s延时的循环次数AP2: CPL P1.2 ;A道绿灯闪烁LCALL DELAY500DJNZ R1,AP2 ;3s未到,继续循环MOV P1,#0F5H ;A道黄灯亮,B道红灯亮MOV R1,#6AP3: LCALL DELAY500DJNZ R1,AP3 ;3s未到,继续循环MOV P1,#0DEH ;A道红灯亮,B道绿灯亮MOV R1,#48BP1: LCALL DELAY500DJNZ R1,BP1 ;24s未到,继续循环MOV R1,#6BP2: CPL P1.5 ;B道绿灯闪烁LCALL DELAY500DJNZ R1,BP2 ;3s未到,继续循环MOV P1,#0EEH ;A道红灯亮,B道黄灯亮MOV R1,#6BP3: LCALL DELAY500DJNZ R1,BP3 ;3s未到,继续循环SJMP LOOP ;循环;外部中断0(高优先级)紧急车辆中断服务程序(A、B车道禁行15s):ORG 0200HINTRPT0: MOV P1,#0F6H ;A道红灯亮,B道红灯亮MOV R2,#30 ;15s延时的循环次数DELAY0: LCALL DELAY500DJNZ R2,DELAY0 ;15s未到,继续循环RETI ;中断返回;外部中断1有车车道放行中断服务程序(手控放行15s):ORG 0300HINTRPT1: JNB P3.0,AP0 ;A道无车,转向判断B道MOV P1,#0F3H ;A道绿灯亮,B道红灯亮SJMP DEL1 ;转向15s延时程序AP0: JNB P3.1,EXIT ;B道无车,退出中断MOV P1,#0DEH ;A道红灯亮,B道绿灯亮DEL1: MOV R3,#30 ;15s延时的循环次数NEXT: LCALL DELAY500DJNZ R3,NEXT ;15s未到继续循环EXIT: RETI ;返回原程序;延时500ms子程序(fosc=6MHz):ORG 0350HDELAY500: MOV R4,#10LP1: MOV R5,#50LP2: MOV R6,#248NOPLP3: DJNZ R6,LP3DJNZ R5,LP2DJNZ R4,LP1RETEND4.3定时器/计数器实验(1)T0方式0 定时2ms 方波查询方式ORG 0000HLJMP MAINORG 0030HMAIN: ;置1ms定时初值;置定时器0为工作方式0;启动定时器0LP1: ;查询,若计数溢出,跳至LP2并清除TF0,否则顺序执行SJMP LP1 ;未到1ms继续计数LP2: ;重装1ms定时初值;输出取反SJMP LP1 ;重复循环END(2)T0方式0 定时2ms 方波中断方式ORG 0000HAJMP MAIN;转T0中断入口地址AJMP T0INTORG 0030HMAIN: ;置1ms定时初值;置定时器0为工作方式0;启动T0;开T0中断;开总中断SJMP $T0INT: ;重装1ms定时初值;输出取反RETIEND(3)T0方式3、定时,中断方式,P1.0输出周期为400us、P1.1输出周期为800us的方波ORG 0000HAJMP MAIN;转T0中断入口地址AJMP PINT0;转T1中断入口地址AJMP PINT1ORG 0030HMAIN: ;0000 0011B 方式3;定时200us计数初值;定时400us计数初值;启动TL0、TH0计数0101 0000B TR1=TR0=1;1000 1010B中断允许AJMP $PINT0:CPL P1.0RETIPINT1:CPL P1.1RETIEND(4)T0方式3 定时300us 输出占空比1/3矩形波查询方式ORG 0000HLJMP MAINORG 0030HMAIN: MOV TMOD, ;设置Timer 0工作在模式3下LOAD: ;往TL0中载入100us计数初始值;往TH0中载入200us计数初始值SETB P1.0 ;P1.0置1LCALL TL_DLY ;调以TL0为基础的延时子程序CLR P1.0 ;P1.0清0LCALL TH_DLY ;调以TH0为基础的延时子程序JMP LOAD ;循环,重新装载计数初始值TL_DLY: ;以TL0为Timer寄存器的Timer的延时子程序段;启动以TL0为寄存器的TimerTL_CHK: JNB TF0, TL_CHK ;检测溢出标志;关闭Timer;将TF0清0RET ;返回主程序TH_DLY: ;以TH0为Timer寄存器的Timer的延时子程序段;启动以TH0为寄存器的TimerTH_CHK: JNB TF1, TH_CHK ;检测溢出标志CLR TR1 ;关闭TimerCLR TF1 ;将TF1清0RET ;返回主程序END(5)T1方式2、计数P3.5引脚输入脉冲,每计数10次,对P1.0取反。
ORG 0000HLJMP MAINORG 0030HMAIN:;T1方式2,计数方式;T1计数初值;启动T1LOOP: ;查询TF1,溢出转REP并清0SJMP LOOPREP: ;对P1.0取反SJMP LOOPEND4.4 串口通信实验(1)74LS164 CD4094串入并出ORG 0000HLJMP MAINORG 0030HMAIN: ;串行口方式0;禁止串行中断;置LED控制字表首址LP1: MOV R7,#0 ;置顺序编号0LP2: MOV A,R7 ;读顺序编号MOVC A,@A+DPTR ;读控制字CLR P1.0 ;STR=0,关闭并行输出;;启动串行发送;等待发送完毕;清发送中断标志SETB P1.0 ;STR=1,开启并行输出;LCALL DLY ;调用延时子程序INC R7 ;指向下一控制字CJNE R7,#35,LP2 ;判循环操作完否?未完继续SJMP LP1 ;顺序编号0~35依次操作完毕,从0开始重新循环DLY: MOV R3,#50 ;延时子程序D1: MOV R4,#20D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETTAB: DB 0FFH, 00H, 0FH,0F0H,0AAH,0FFH ;全亮-全灭-后半亮-前半亮-0246亮-全亮DB 7FH, 3FH, 1FH, 0FH, 07H, 03H,01H,00H ;从左向右依次熄灭,直至全灭DB 80H, 40H, 20H, 10H, 08H, 04H,02H,01H ;从左向右依次点亮,每次亮一个DB 02H, 04H, 08H, 10H, 20H, 40H,80H ;从右向左依次点亮,每次亮一个DB 0C0H,0E0H,0F0H,0F8H,0FCH,0FEH ;从左向右依次点亮,直至全部点亮END(2)74LS165并入串出ORG 0000HLJMP MAINORG 0030HMAIN: JB P2.0,$ ;开关K未合上, 等待SETB P2.2 ;P2.2置数H-L-HCLR P2.2SETB P2.2SETB P2.1 ;P2.1时钟禁止H-LCLR P2.1;模式0并启动接收;查询RI;RI=1, 清RI;输入数据MOV P1,A ;根据A处理不同任务SJMP MAIN ;准备下一次接收END(3)双机通信排队呼叫器U1:ORG 0000HLJMP MAINORG 0030HMAIN: ;设置串行口工作在模式1下,接收使能;使用Timer 1工作在模式2下;波特率2400;启动Timer 1WAIT_DIAL: JBC RI, CHECK_99 ;判断是否接收到呼叫JMP WAIT_DIALCHECK_99: ;接收到的数据载入ACCMOV P1,ACJNE A, #99H, WAIT_DIAL ;判断是否为呼叫号99HSEND_RESPONSE:;发送应答号01HCHECK_01: JBC TI, RCIV_NUM ;判断应答号是否发送完毕JMP CHECK_01RCIV_NUM: JBC RI, DISPLAY ;等待接收显示数据JMP RCIV_NUMDISPLAY: ;将接收到的显示数据载入ACC中MOV P0, A ;输出至P0口显示CALL DELAY ;延时JMP RCIV_NUM ;循环接收数据DELAY: MOV R3,#5 ;延时子程序(500ms)D1: MOV R4,#2D2: MOV R5,#248DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETENDU2:ORG 0000HLJMP MAINORG 0030HMAIN: ;设置串行口工作在模式1下,接收使能;使用Timer 1工作在模式2下;波特率2400;启动Timer 1DIAL: MOV SBUF, #99H ;发送呼叫号99HCHECK_99: JBC TI, WAIT_ RSPS ;判断是否发送完毕,完毕跳转到接收应答JMP CHECK_99WAIT_RSPS: JBC RI, CHECK_01 ;串行口接收到数据则跳转到判断应答号JMP WAIT_RSPSCHECK_01: ;将接收到的数据从SBUF载入ACC MOV P1,A ;显示接收数据CJNE A, #01H, DIAL ;判断接收到的数据是否为应答号01H,如不是,重呼SEND_NUM: MOV A, P2 ;将键盘按键值载入ACC;发送键盘按键值CHK_SEND: JBC TI, FINISH ;判断是否发送完毕JMP CHK_SENDFINISH: JMP SEND_NUM ;循环发送数据END4.5 系统及接口扩展实验(1)独立按键查询方式ORG 0000HLJMP MAINORG 0030HMAIN:JNB ACC.0, KEY0JNB ACC.1, KEY1JNB ACC.2, KEY2JNB ACC.3, KEY3JNB ACC.4, KEY4JNB ACC.5, KEY5JNB ACC.6, KEY6JNB ACC.7, KEY7JMP MAINKEY0:KEY1: AJMP PRO1KEY2: AJMP PRO2KEY3: AJMP PRO3KEY4: AJMP PRO4KEY5: AJMP PRO5KEY6: AJMP PRO6KEY7: AJMP PRO7PRO0:JMP MAINPRO1: CLR P0.1JMP MAINPRO2: CLR P0.2JMP MAINPRO3: CLR P0.3JMP MAINPRO4: CLR P0.4JMP MAINPRO5: CLR P0.5JMP MAINPRO6: CLR P0.6JMP MAINPRO7: CLR P0.7JMP MAINEND(2)独立按键中断方式ORG 0000HLJMP MAINORG 0003HLJMP INTORG 0030HMAIN:;边沿触发SJMP $INT: MOV A, P1JNB ACC.1, KEY1JNB ACC.2, KEY2JNB ACC.3, KEY3JNB ACC.4, KEY4JNB ACC.5, KEY5JNB ACC.6, KEY6JNB ACC.7, KEY7KEY0:KEY1: AJMP PRO1KEY2: AJMP PRO2KEY3: AJMP PRO3KEY4: AJMP PRO4KEY5: AJMP PRO5KEY6: AJMP PRO6KEY7: AJMP PRO7PRO0:JMP INTENDPRO1: CPL P0.1JMP INTENDPRO2: CPL P0.2JMP INTENDPRO3: CPL P0.3JMP INTENDPRO4: CPL P0.4JMP INTENDPRO5: CPL P0.5JMP INTENDPRO6: CPL P0.6JMP INTENDPRO7: CPL P0.7JMP INTENDINTEND:RETIEND(3)矩阵按键查询方式ORG 0000HAJMP MAINORG 0030HMAIN: LCALL KEYSCAN ;调用键盘扫描程序LJMP MAINKEYSCAN: MOV R3,#0EFH ;行扫描值11101111暂存于R3 MOV R4,#0 ;列值存R4KS_NEXT: MOV P3,R3 ;输出行码MOV A,P3 ;读入列码;屏蔽高4位;判断是否有键按下;当前行码无键按下,转NEXT;有键按下,延时消抖;有键按下, 转L0,开始依次判断L0: ;有键按下,ACC.0!=0,转L1;ACC.0=0,行值0送AACALL DISPLAY ;AJMP RTNL1: JNB ACC.1,L2 ;有键按下,ACC.1!=0,转L2 MOV A,#1ACALL DISPLAYAJMP RTNL2: JNB ACC.2,L3 ;有键按下,ACC.2!=0,转L3 MOV A,#2ACALL DISPLAYAJMP RTNL3: MOV A,#3 ;ACC.3=0ACALL DISPLAYAJMP RTNRTN: RETNEXT: MOV A,R3JNB ACC.7,KEYSCAN ;ACC.7!=0,继续扫描;行扫描值左移;行扫描值送R3;列值更新;扫描下一行时列值+4送AMOV R4,AAJMP KS_NEXTDISPLAY: ;行值+列值得键值送AMOV DPTR,#TAB;取按键编号MOV P0,ARETDELAY: MOV R6,#10D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H;DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH;END(4)LED静态显示0-99计数器ORG 0000HLJMP MAINORG 0030HMAIN: MOV DPTR,#TAB ;设置段码表首地址MOV R0,#00H ;计数初值存R0MOV P0,#3FH ;复位显示0_共阴MOV P2,#3FH ;复位显示0_共阴ADD1: INC R0 ;计数值加1CJNE R0,#100,KEYDNMOV R0,#00H ;>99回0KEYDN: JB P1.0,$ ;等待按键按下LCALL DELAY ;延时消抖JB P1.0,KEYDNDISP: MOV A,R0MOV B,#10DIV AB ;分离计数值的个位和十位MOVC A,@A+DPTR ;十位查表MOV P0,AMOV A,BMOVC A,@A+DPTR ;个位查表MOV P2,AJB P1.0,ADD1 ;等待按键抬起LJMP DISPDELAY: MOV R5,#20 ;延时10msD1: MOV R6,#250DJNZ R6,$DJNZ R5,D1RETTAB: DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHEND(5)LED动态显示0-7ORG 0000HLJMP MAINORG 0030HMAIN: MOV R0,#0MOV R1,#30H ;数据暂存30H~37HMOV R2,#8 ;8位MOV DPTR,#TAB ;取表格首地址GET8: MOV A,R0MOVC A,@A+DPTR ;从表格里取数MOV @R1,A ;保存所取的数INC R0 ;自加,为下次取数作准备INC R1DJNZ R2,GET8 ;循环8次,将所要在8个LED上显示的数取出来LEDREP: MOV R0,#30HMOV R1,#7FH ;设置位选,从第一位开始显示MOV R2,#8 ;8位LED需要8次循环BITREP: MOV A,R1 ;位选CLR P3.3 ;清零时钟端MOV SBUF, A ;发送位选信号JNB TI,$ ;等待,如果TI为1则转CLR TI ;清除TI,为下一次发送作准备SETB P3.3 ;置位时钟信号;NOPMOV A,@R0 ;取数CLR P3.2 ;数字显示程序MOV SBUF, AJNB TI,$CLR TISETB P3.2;NOPLCALL DELAYINC R0 ;自加1,为下一位的显示作准备MOV A,R1 ;取上次位选RR A ;段选右移,控制下一位的显示MOV R1,A ;新的位选DJNZ R2,BITREP ;8位循环显示SJMP LEDREPDELAY: MOV R6,#50L1: MOV R7,#50L2: DJNZ R7,L2DJNZ R6,L1RETTAB: DB 0FCH,060H,0DAH,0F2H,066H,0B6H,0BEH,0E0HEND(6)数字电压表LED_G EQU 30H ;个位段码LED_S EQU 31H ;十位段码LED_B EQU 32H ;百位段码LED_Q EQU 33H ;千位段码ORG 0000HSJMP MAINORG 000BHLJMP INT_T0ORG 0030HMAIN: MOV DPTR,#TAB ;段码表首地址MOV TMOD,#02H ;0000 0010B T0-自动重装8位MOV TH0,#245MOV TL0,#00HMOV IE,#82H ;EA=1,ET0=1SETB TR0WAIT:;产生START信号,启动AD转换;等待转换结果EOC;输出允许信号OEMOV R5,P2 ;读取AD总转换结果存R5CLR P1.7MOV LED_Q,#00H ;千位清0MOV LED_B,#00H ;百位清0MOV A,#00H ;个/拾位清0LOOP1: ADD A,#20H ;量化间隔约20mVDA AJNC LOOP2 ;未溢出,转LOOP2MOV R4,A ;溢出,个/拾位暂存R4INC LED_B ;百位+1MOV A,LED_BCJNE A,#0AH,LOOP4 ;百位!=10,转LOOP4MOV LED_B,#00H ;百位=10,清0INC LED_Q ;千位+1LOOP4: MOV A,R4 ;个/拾位送ALOOP2: DJNZ R5,LOOP1 ;R5-总转换结果ACALL BTOD1LCALL DISPSJMP WAITBTOD1: ANL A,#0F0H ;留高4位SWAP A ;高低4位交换MOV LED_S,A ;得十位MOV A,R4 ;R4-->AANL A,#0FH ;留低4位MOV LED_G,A ;得个位RETINT_T0: CPL P1.4 ;提供0809时钟信号RETIDISP: MOV A,LED_G ;显示子程序MOVC A,@A+DPTRCLR P1.3 ;个位位选MOV P0,A ;送个位段码LCALL DELAYSETB P1.3MOV A,LED_SMOVC A,@A+DPTRCLR P1.2 ;十位位选MOV P0,A ;送十位段码LCALL DELAYSETB P1.2MOV A,LED_BMOVC A,@A+DPTRCLR P1.1 ;百位位选MOV P0,A ;送百位段码LCALL DELAYSETB P1.1MOV A,LED_QMOVC A,@A+DPTRCLR P1.0 ;千位位选MOV P0,A ;送千位段码LCALL DELAYSETB P1.0RETDELAY: MOV R6,#10 ;延时5msD1: MOV R7,#250DJNZ R7,$DJNZ R6,D1RETTAB: DB 3FH,06H,5BH,4FH,66H ;共阴数码管7段值DB 6DH,7DH,07H,7FH,6FHEND。