单片机实验程序
单片机实验一拆字程序
单片机实验一拆字程序 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】实验一拆字程序1 实验名称拆字程序2 实验目的掌握汇编语言测试和调试方法。
3 实验内容把7000H的内容拆开,高位送7001H的低位,低位送7002H的低位,7001H、7002H高位清零,本程序应用于把数据送显示缓冲区。
4 硬件连线5 实验步骤(1)PC机开始菜单程序 51JH实验系统 DVCC实验系统 ,进入实验界面。
选中本次实验名称,查看实验目的、内容、硬件连线、步骤。
输入源程序,编译、联接、运行实验程序。
(2)DVCC实验系统①先用存储器读写方法将7000H单元内容置成34H。
按复位键,显示P.,输入7000H,按MEM键,输入34。
②用单步、断点或连续执行程序的方法从其始地址0050H开始运行程序(输入0050后按STEP为单步,按EXEC为连续)。
按RESET后,显示P.,输入0050,按EXEC③按MON键或RESET键退出。
④检查7001H、7002H单元中的内容应为03H、04H。
输入7000H,按MEM键,显示03,按NEXT显示04。
6 实验程序ORG 0050HCWORD: MOV DPTR,#7000HMOVX A,@DPTRMOV B,ASWAP AANL A,#0FHINC DPTRMOVX @DPTR,AINC DPTRMOV A,BANL A,#0FHMOVX @DPTR,ACWORD1: SJMP CWORD1END7 实验拓扑修改源程序,实现将把3000H的内容拆开,高位送3001H的低位,低位送3002H的低位,7001H、7002H高位清零。
用存储器读写方法将3000H单元内容置成76H。
8 实验结果分析向存储器7000H单元写入34H,执行程序,检查拆字后7001H、7002H单元中的内容为03H、04H。
向存储器3000H单元写入76H,执行程序,检查拆字后7001H、7002H单元中的内容为07H、06H。
单片机程序流程图及源代码
单片机上机实验报告【实验一】端口实验,掌握通过端口编程实现数据输出和输入的方法,并观察结果。
实验内容:1)输出实验:假定4个端口全部连接发光二极管,编程实现所有发光二极管同时亮,延迟一定时间(自定)后,又同时灭,如此循环。
2)输入:从P0口输入某个数据到累加器A,打开观察窗口观察数据是否进入累加器A。
实现方式:通过peripherals实现端口数据观察实验。
程序流程图:将P0到P3端口先赋值为0,调用延迟后,再赋1,然后循环执行。
源代码:ORG 0000H ;程序入口地址LJMP MAIN ;跳转到主程序ORG 0300H ;主程序地址MAIN:MOV P0,#00H;MOV P1 ,#00H;MOV P2 ,#00H;MOV P3 ,#00H ;P0~P3均赋值为0ACALL DEL;调用延迟MOV P0 ,#0FFH;MOV P1 ,#0FFH;MOV P2 ,#0FFH;MOV P3 ,#0FFH;P0~P3均设为1MOV A,P0;将P0口值赋给累加器ACALL DEL;AJMP MAIN;跳转到主程序入口ORG 0200H;延迟程序入口地址DEL:MOV R5,#04H;寄存器实现延迟,F3:MOV R6,#0FFH;若主频为12MHZ则F2:MOV R7,#0FFH;延时为256*256*4F1:DJNZ R7,F1;0.26S,人眼可分辨DJNZ R6,F2;DJNZ R5,F3;RET;从延迟程序返回END;结束3.假设P0口外接一个数码管(共阴),如图,请在数码管上轮流显示数字0~9(采用软件延时)。
程序流程图:将数码管的真值编码0~9依次赋给P0并调用延迟,然后循环运行程序即可。
源代码:ORG 0000H; 程序入口SJMP MAIN; 跳转到主程序ORG 0300H; 主程序入口地址MAIN:MOV P0,#0FCH; 将数码管0的编码赋给P0口ACALL DELAY; 调用延迟,使数码管亮0持续0.33SMOV P0,#60H; show 1ACALL DELAY;MOV P0,#0DAH; show 2ACALL DELAY;MOV P0,#0F2H; show 3ACALL DELAY;MOV P0,#66H; show 4ACALL DELAY;MOV P0,#0B6H; show 5ACALL DELAY;MOVP0,#0BEH; show 6ACALL DELAY;MOV P0,#0E0H; show 7ACALL DELAY;MOV P0,#0FEH; show 8ACALL DELAY;MOV P0,#0F6H; show 9ACALL DELAY;AJMP LOOP; 跳转到主程序入口ORG 0200H; 延迟程序入口DEL:MOV R5,#05H; 采用软件延迟,若主频为12MHz,则DEL1:MOV R6,#0FFH; 定时时间为256*256*5*1uS=0.33S,DEL2:MOV R7,#0FFH; 人眼可分辨。
单片机所有实验程序
单片机实验程序-------- 1.定时器及中断实验#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(){uint x,y;for(x=100;x>0;x--)for(y=110;y>0;y--);}uchar m,flag;main(){uchar a,b;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EX0=1;EX1=1;PX1=1;ET0=1;TR0=1;EA=1;m=0;P1=0;while(1){while(flag==0);flag=0;if(m==100)m=0;m++;a=m/10;b=m+a*6;P1=b;}}void timer0() interrupt 1 using 0{uchar t;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(t<20)t++;else {flag=1;t=0; }}void exter0() interrupt 0 using 1{if(INT0==0)delay();if(INT0==0)flag=1;}void exter1() interrupt 2 using 2{if(INT1==0)delay();if(INT1==0)m=0;}2.定时器控制二极管#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar num;uint a;main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;num=0;a=0;P1=table[num];while(1){}}void exter0() interrupt 1{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++;if(a==20){ a=0;num++;if(num==8) num=0;P1=table[num];}}3.时钟综合实验#include <reg51.h>unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char m,sec,min;void delay(){ unsigned char x,y;for(x=100;x>0;x--)for(y=50;y>0;y--);}void main(){TMOD=0x01;TH0=15536/256;TL0=15536%256;ET0=1;TR0=1;IT0=1;EX1=1;EX0=1;EA=1;while(1){P2=0x80;P0=tab[sec%10];delay();P0=0xff;P2=0x40;P0=tab[sec/10];delay();P0=0xff;P2=0x20;P0=tab[min%10];delay();P0=0xff;P2=0x10;P0=tab[min/10];delay();P0=0xff;}}void timer() interrupt 1 using 1 {TH0=15536/256;TL0=15536%256;m++;if(m==3){m=0;sec++;}if(sec==60){sec=0;min++;}if(min==60)min=0;}void srv0() interrupt 0 using 0 {if(INT0==0)min++;if(min==60)min=0;}void srv1() interrupt 2 using 2 {if(INT1==0){ sec=0;min=0;}}4.PC发送到单片机#include <reg51.h> unsigned char a;void main(){ SCON=0x50;TMOD=0x20;TH1=TL1=0xfd;TR1=1;ET1=0;ES=1;EA=1;while(1);/* {/* while(!RI);a=SBUF;RI=0;if(a==0x55){SBUF=0x41;while(!TI);TI=0;}*/// }}void srv() interrupt 4{ if(RI){a=SBUF;RI=0;}if(a==0x55){SBUF=0x41;while(!TI);TI=0;}}发送#include <reg51.h>void main(){ SCON=0x40;TMOD=0x20;TH1=TL1=0xfd;TR1=1;while(1){SBUF=0x55;while(!TI);TI=0;}}AD#include <reg51.h>#include <intrins.h>#include <absacc.h>#define PIN0 XBYTE[0x7ff8]#define PIN1 XBYTE[0x7ff9] typedef unsigned char byte; typedef unsigned int word;void main(void){float resuit0,result1;float resuit0_reg,result1_reg;byte i,j,k;while(1){for(i=0;i<2;i++){if(!i)PIN0=0;else PIN1=0;for(k=0;k<255;k++);if(!i)resuit0_reg=PIN0;else result1_reg=PIN1;}resuit0=resuit0_reg*5/255;result1=result1_reg*5/255;}}。
[整理]单片机6个必做实验
第一部分软件实验实验一二进制到BCD码转换一、实验目的1、掌握简单的数值转换算法2、基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一个二进制数,转换成二十进制(BCD)码。
将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
三、实验内容及步骤1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,选择使用伟福软件模拟器。
2、打开TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。
用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。
修改源程序中给累加器A的赋值,重复实验,观察实验效果。
3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序1.源程序RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $END2.流程图实验四程序跳转表一、实验目的1、了解程序的多分支结构2、掌握多分支结构程序的编程方法二、实验说明多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。
若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。
单片机整套实验及程序(交通灯_跑马灯等)
实验1 跑马灯实验一、实验目的●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用;●初步掌握采用汇编语言与C语言开发单片机系统的程序结构;●掌握80C51单片机通用I/O口的使用;●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。
二、实验设备及器件●硬件:PC机,HNIST-1型单片机实验系统●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管〔D1、D2、D3、D4〕按照一定的方式点亮。
如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。
●基于Proteus ISIS仿真环境完成上述功能的仿真。
●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、实验原理图图3.1 跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。
五、软件流程图与参考程序●主程序流程图如下:●参考程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar aa,num,speed,flag;uchar code table[]={0x0e,0x0d,0x0b,0x07};uchar code table1[]={0x0a,0x05,0x09,0x06};uchar codetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};void delay(uint z)//延时函数{uint x;uchar y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init()//条件初始化函数{ flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式TH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//翻开总中断ET0=1;//翻开外中断0TR0=1;}void main(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num<4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num<4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);}for(num=0;num<5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}void timer0() interrupt 1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题●请用汇编指令完本钱实验内容,深刻理解汇编语言程序设计结构。
51单片机分组控制灯实验步骤
51单片机分组控制灯实验步骤以下是基于51 单片机实现分组控制灯实验的基本步骤:
1. 硬件准备:
- 51 单片机开发板
- 连接线
- 不同颜色的LED 灯(根据需要选择)
2. 连接电路:
- 将LED 灯连接到单片机的I/O 口,确保每个LED 灯与一个单独的I/O 口相连。
3. 软件编写:
- 使用C 语言或汇编语言编写单片机程序。
- 定义LED 灯对应的I/O 口。
- 创建一个延时函数,用于控制灯的闪烁时间。
- 编写主函数,根据需要进行分组控制。
- 遍历每个分组,将相应的I/O 口设置为高电平或低电平,以控制灯的亮灭。
4. 编译和下载程序:
- 使用相应的编译器将编写的程序编译成可执行的hex 文件。
- 使用下载工具将hex 文件下载到单片机中。
5. 运行和测试:
- 连接单片机开发板到电源,并运行程序。
- 观察LED 灯的状态,确保每个分组的灯按照预期进行控制。
单片机实验报告范文
单片机实验报告范文一、实验目的本实验的目的是通过学习单片机的基本原理和使用方法,掌握单片机在各个实际应用中的基本技能。
二、实验器材及原理1.实验器材:STC89C52单片机、电源、晶振、按键、LED灯、蜂鸣器等。
2.实验原理:单片机是一种微处理器,能够完成各种复杂的功能。
通过学习单片机的工作原理和编程方法,可以控制各种外围设备,实现不同的功能。
三、实验内容及步骤1.实验一:点亮LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)编写程序,点亮LED灯。
2.实验二:按键控制LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)将按键和LED灯与单片机相连。
(3)编写程序,实现按下按键控制LED灯亮灭。
3.实验三:数码管显示步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)将数码管与单片机相连。
(3)编写程序,将数字输出到数码管上显示。
4.实验四:定时器应用步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。
(2)编写程序,实现定时器功能。
四、实验结果及分析1.实验一:点亮LED灯LED灯成功点亮,证明单片机与外部设备的连接正常。
2.实验二:按键控制LED灯按下按键后,LED灯亮起,松开按键后,LED灯熄灭。
按键控制LED 灯的效果良好,说明单片机的输入输出功能正常。
3.实验三:数码管显示数码管成功显示数字,说明单片机能够实现数字输出功能。
通过程序设计,可以实现数码管显示不同的数字。
4.实验四:定时器应用定时器正常运行,能够实现精确的定时功能。
通过调节定时器的参数,可以实现不同的定时功能。
五、实验总结通过本次实验,我们学习了单片机的基本原理和使用方法。
通过掌握单片机的编程技巧,我们能够实现各种复杂的功能,如控制LED灯、按键控制、数码管显示等。
这些技能对于日常生活和工程设计都具有很大的实用性。
在实验过程中,我们遇到了各种问题,如电路连接错误、程序编写错误等。
单片机实验程序及流程图
《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.程序清单及程序流程框图ORG 0000H Array LJMP MAINMAIN: MOV R0,#30HMOV R2,#10HCLR AA1: MOV @R0,AINC R0INC ADJNZ R2,A1MOV R0,#30HMOV R1,#40HMOV R2,#10HA2: MOV A, @R0MOV @R1,AINC R0INC R1DJNZ R2, A2MOV R1,#40HMOV DPTR ,#4800HMOV R2, #10HA3: MOV A,@R1MOVX @DPTR ,AINC R1INC DPTRDJNZ R2,A3MOV SP,#60HMOV R2,#10HMOV DPTR ,#4800HPUSH DPLPUSH DPHMOV DPTR,#5800HMOV R3,DPLMOV R4,DPHA4: POP DPHPOP DPLMOVX A,@DPTRINC DPTRPUSH DPLPUSH DPHMOV DPL,R3MOV DPH,R4 MOVX @DPTR,A INC DPTRMOV R3,DPLMOV R4,DPHDJNZ R2,A4MOV R0,#50HMOV DPTR,#5800H MOV R2,#10HA5: MOVX A,@DPTR MOV @R0,AINC R0 INC DPTR DJNZ R2,A5POP DPH POP DPL HERE: LJMP HEREEND《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义《单片机技术》实验多媒体讲义三.实验电路四.程序清单及流程图程序一ORG 0000HLJMP MAIN ORG 000BH LJMP IPTO MAIN: MOV SP, #30H MOV TMOD, #01HCLR 00H SETB EA SETB ET0 MOV TH0, #3CH MOV TL0, #0B0H MOV R1, #14H SETB TR0 MOV A, #0feH MOV P1, A NT: JNB 00H, NT RL A MOV P1, ACLR 00H LJMP NT IPTO: MOV TH0,#3CH MOV TL0,#0B0HDJNZ R1, TIOMOV R1, #14HSETB 00HTIO: RETIEND程序二只需将程序一中“RL A”改为“RR A”即可实现其功能。
单片机实验指导书
单片机实验指导书第一章实验概述本实验指导书旨在帮助学生掌握单片机基本原理和应用技巧。
通过实验的学习,学生将了解单片机的内部结构,学习单片机的编程方法,并能够用单片机实现简单的控制功能。
第二章实验准备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 调试和故障排除如果遇到实验效果不理想或者出现故障的情况,可以参考开发板的说明书进行故障排查和调试。
第五章实验总结通过本次实验,我深入了解了单片机的基本原理和应用技巧。
通过编写程序并实际观察实验现象,我成功掌握了单片机编程的方法和技巧,并能够用单片机实现简单的控制功能。
本次实验还让我意识到了实验中的安全注意事项和环境要求的重要性。
在实验过程中,我严格遵守了安全规定,并在安静整洁的环境中进行操作,确保实验顺利进行。
通过反复实践和调试,我不断提高了自己的实验技巧和问题排查能力。
在遇到故障时,我能够通过检查并参考说明书,准确地找到并解决问题。
单片机综合实训教案
单片机综合实训教案一、教学目标1. 了解单片机的基本概念、结构和原理。
2. 掌握单片机的编程方法和应用技巧。
3. 能够独立完成单片机系统的设计和调试。
二、教学内容1. 单片机概述单片机的定义和发展历程单片机的结构和组成部分2. 单片机编程基础单片机的指令系统编程语言和开发工具程序结构和编程规范3. 单片机应用系统设计系统需求分析硬件选型和电路设计软件设计和编程4. 单片机系统调试与优化调试方法和工具常见问题和解决方案系统性能优化技巧5. 单片机应用案例解析温度控制器设计智能家居系统设计控制系统设计三、教学方法1. 讲授法:讲解单片机的基本概念、原理和编程方法。
2. 实践法:动手操作单片机开发板,进行编程和系统设计。
3. 案例分析法:分析实际应用案例,理解单片机的应用场景。
4. 讨论法:分组讨论,解决实际问题和难点。
四、教学资源1. 教材:单片机原理与应用2. 实验设备:单片机开发板、编程器、调试器等3. 软件工具:Keil、MPLAB等编程软件4. 在线资源:相关教程、案例和答疑论坛五、教学评价1. 平时成绩:考察学生的出勤、提问和讨论情况。
2. 实验报告:评估学生的实践操作能力和编程水平。
3. 课程设计:评价学生的系统设计和调试能力。
4. 期末考试:测试学生对单片机知识的掌握程度。
六、教学安排1. 课时:共计32课时,其中理论讲授16课时,实验操作16课时。
2. 教学计划:第1-4课时:单片机概述及结构原理第5-8课时:单片机编程基础第9-12课时:单片机应用系统设计第13-16课时:单片机系统调试与优化第17-20课时:单片机应用案例解析第21-24课时:实践操作与实验第25-28课时:课程设计第29-32课时:期末复习与考试七、教学重点与难点1. 教学重点:单片机的基本概念、结构和原理。
单片机的编程方法和应用技巧。
单片机系统的设计、调试与优化。
2. 教学难点:单片机指令系统的理解与应用。
硬件电路设计与故障排除。
单片机程序大全
单片机程序大全(以下是一个以“单片机程序大全”为题目的文章范例,依据题目性质并非一个合同或作文的格式。
请注意,这个范例只是为了明示写作格式的变化,并非提供一个实际的单片机程序大全。
)单片机程序大全本文将为大家提供一个全面的单片机程序大全,涵盖了各种常见的单片机应用。
希望本文能够对单片机程序的学习和实践有所帮助。
一、LED灯程序LED灯是一个常见的单片机实验项目。
以下是一个基本的LED灯闪烁程序的代码,使用C语言编写:```c#include <reg51.h>#define LED P0void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {LED = 0xFF; // 所有LED灯亮delay(1000); // 延时1秒LED = 0x00; // 所有LED灯灭delay(1000); // 延时1秒}}```二、温度监测程序单片机可以用于温度监测,以下是一个简单的温度监测程序的代码示例,使用C语言编写:```c#include <reg51.h>#define TEMP P1void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {if (TEMP > 30) {P0 = 0x01; // 温度过高,亮起警示灯 } else {P0 = 0x00; // 温度正常,灭掉警示灯 }delay(100); // 延时0.1秒}}```三、电机控制程序单片机常用于电机控制,以下是一个电机正反转控制程序的代码示例,使用C语言编写:```c#include <reg51.h>#define MOTOR P2void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {MOTOR = 0x01; // 电机正转delay(1000); // 延时1秒MOTOR = 0x02; // 电机反转delay(1000); // 延时1秒}}```以上仅是三个简单的单片机程序示例,单片机的应用非常广泛,包括但不限于LED灯闪烁、温度监测、电机控制等。
单片机c语言程序设计---单片机实验报告
单片机c语言程序设计---单片机实验报告实验目的:1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器实验内容:一.定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。
(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。
)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。
方式2有自动重装初值的功能,初始化后不必再置初值。
将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。
TMOD=60H。
定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。
程序:#include<REGX51.H>void main(){P1_0=0;TMOD=0x60;TH1=0xFD;TL1=0xFD;ET1=1;EA=1;TR1=1;while(1){}}void timer1_Routine()interrupt3{P1_0=~P1_0;}实验2.中断定时使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。
分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。
主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。
实验要求:完成计数实验和中断计数实验。
具体包括绘制仿真电路图、编写c源程序、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,对仿真结果进行总结。
程序:#include<REGX51.H>#include"Delay.h"int i;int j=0;void main(){ P1=0; P2=0;P3=0; P0=0; TMOD=0x01;TH0=0x3C;TL0=0xB0;ET0=1;EA=1;TR0=1;while(1) {}}void timer0_Routine()interrupt1 {TH0=0x3C;TL0=0xB0;j++;if(j>=150){ j=0; for(i=0;i<20;i++){P1=~P1;P2=~P2;P3=~P3;P0=~P0;Delay(200); } }}实验分析:心得体会:。
单片机试验项目(键盘程序设计),附代码大全
单片机试验项目(键盘程序设计),附代码大全1、键盘与的连接图3键盘连接图4单片机与键盘接口图2、通过I/0口连接。
将每个按钮的一端接到单片机的I/O口,另一端接地,这是最简单的办法,如图3所示是实验板上按钮的接法,四个按钮分别接到P3.2 、P3.3、P3.4和P3.5。
对于这种键各程序能采用持续查询的办法,功能就是:检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入对应的键处理。
下面给出一个例程。
其功能很简单,四个键定义如下:P3.2:开始,按此键则灯开始流动(由上而下)P3.3:停止,按此键则停止流动,所有灯为暗P3.4:上,按此键则灯由上向下流动P3.5:下,按此键则灯由下向上流动UpDown EQU 00H ;上下行标志StartEnd EQU 01H ;起动及停止标志LAMPCODE EQU 21H ;存放流动的数据代码以下程序功能很简单,但它演示了一个单片机程序的基本思路,程序本身很简单,也不很实用,实际工作中还会有好多要考虑的因素,比如主循环每次都调用灯的循环程序,会造成按钮反应“迟钝”,而如果一直按着键不放,则灯不会再流动,一直要到松开手为止,等等,大家能仔细考虑一下这些问题,再想想有什么好的解决办法。
ORG 0000HAJMP MAINORG 30HMAIN:MOV SP,#5FHMOV P1,#0FFHCLR UpDown ;启动时处于向上的状态CLR StartEnd ;启动时处于停止状态MOV LAMPCODE,#0FEH ;单灯流动的代码LOOP:ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下,则继续ACALL KEYPROC ;不然调用键盘处理程序LNEXT:ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环,主程序到此结束DELAY:MOV R7,#100D1: MOV R6,#100DJNZ R6,$DJNZ R7,D1RET;----------------------------------------延时程序,键盘处理中调用KEYPROC:MOV A,B ;从B寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)JB ACC.3,KeyOverJB ACC.4,KeyUpJB ACC.5,KeyDownAJMP KEY_RETKeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RETKeyOver:CLR StartEnd ;第二个键按下后的处理AJMP KEY_RETKeyUp: SETB UpDown ;第三个键按下后的处理AJMP KEY_RETKeyDown:CLR UpDown ;第四个键按下后的处理KEY_RET:RETKEY:CLR F0 ;清F0,表示无键按下。
单片机c语言程序设计实训100例——基于arduino+proteus仿真
单片机c语言程序设计实训100例——基于arduino+proteus仿真单片机C语言程序设计是电子信息类专业中的一门重要课程,通过学习这门课程可以掌握基本的嵌入式系统开发技术。
为了提高学生对于单片机编程能力和实践操作能力的培养,通常会进行相关实训。
在这篇文章中,我将介绍一个基于Arduino+Proteus仿真环境下的100个例题来帮助大家更好地理解和掌握单片机C语言程序设计。
每个例题都包含详细说明、代码示例以及相应功能模块在Proteus上面运行效果图等内容。
1. 闪烁LED灯:使用延时函数使得连接到Arduino引脚13上面的LED灯周期性地闪烁。
2. 控制舵机角度:根据输入信号改变舵机转动角度,并且利用串口监视器显示当前角度值。
3. 温湿度传感器读取数据并显示:通过DHT11温湿度传感器获取周围环境温湿度数值,并将其显示出来。
4. 数码管计数器: 使用74HC595芯片驱动四位共阳极数字管,在7段数码管上循环从0-9递增或者递减展示数字5. 蜂鸣器播放音调: 通过PWM信号控制蜂鸣器发出不同频率的声音。
6. 红外遥控LED灯: 使用红外接收模块读取来自红外遥控器发送的指令,并根据指令点亮或者熄灭连接到Arduino引脚上面的LED灯。
这些例题涵盖了单片机C语言程序设计中常见且基础性较强的内容,可以帮助学生逐步提高编程能力和实践操作技巧。
在Proteus仿真环境下进行实验也有以下几个优点:1. 安全可靠:在环境下进行实验,不存在电路元件损坏、线路错误等问题,保证了安全性和稳定性。
2. 节约成本:无需购买昂贵而易损耗品(如传感器、舵机等),只需要使用软件即可完成相关功能测试。
3. 方便快速:Proteus具备图形化界面以及大量现成组建库文件, 只要简单地将所需元素放入画布并连好线就可以开始调试代码4.多样化场景设置: Proteus支持各种设备与芯片之间相互联动关系搭配总结起来说,“100例——基于arduino+proteus仿真”这个实训项目是一个非常有价值的单片机C语言程序设计学习资源。
单片机实训报告实验步骤
一、实验目的1. 掌握单片机的基本工作原理和硬件结构。
2. 熟悉单片机的编程方法,提高编程能力。
3. 学习单片机的调试技巧,提高调试效率。
4. 通过实际操作,培养动手能力和团队合作精神。
二、实验仪器与设备1. 单片机实验开发板2. 编译器(如Keil、IAR等)3. 仿真软件(如Proteus、Multisim等)4. 连接线、电源、示波器等辅助设备三、实验步骤1. 熟悉单片机实验开发板(1)观察开发板的硬件结构,了解各个模块的功能和连接方式。
(2)熟悉开发板上的按键、LED、串口、I2C、SPI等接口。
2. 编写程序(1)根据实验要求,设计程序功能。
(2)选择合适的编程语言(如C语言、汇编语言等)。
(3)使用编译器编写程序代码,并进行语法检查。
3. 程序调试(1)使用仿真软件(如Proteus)对程序进行仿真调试。
(2)观察程序运行结果,检查程序是否存在错误。
(3)根据仿真结果,修改程序代码,直至程序正常运行。
4. 硬件连接(1)根据程序功能,连接开发板上的相关硬件模块。
(2)确保连接正确,避免短路或接触不良。
5. 实验运行(1)打开电源,启动单片机。
(2)观察程序运行情况,验证程序功能是否实现。
(3)根据实验要求,调整程序参数或硬件配置,优化程序性能。
6. 数据采集与记录(1)使用示波器等设备,采集实验过程中的数据。
(2)记录实验数据,为后续分析提供依据。
7. 结果分析(1)对实验数据进行整理和分析,评估程序性能。
(2)总结实验过程中的经验教训,提出改进措施。
8. 实验报告撰写(1)整理实验过程,包括实验步骤、实验数据、实验结果等。
(2)分析实验结果,总结实验经验教训。
(3)撰写实验报告,要求格式规范、内容完整。
四、实验注意事项1. 确保实验环境安全,避免触电、短路等事故。
2. 严格遵守实验操作规程,避免损坏实验设备。
3. 注意程序调试过程中的细节,提高调试效率。
4. 实验过程中,积极思考,勇于创新,提高动手能力。
c51单片机实验报告
c51单片机实验报告
《C51单片机实验报告》
C51单片机是一种广泛应用于嵌入式系统中的微控制器,具有高性能、低功耗和丰富的外设接口,因此在各种电子设备中得到了广泛的应用。
本次实验将以C51单片机为研究对象,通过实验验证其性能和功能。
实验一:LED灯控制实验
首先,我们将C51单片机与LED灯连接起来,通过程序控制LED灯的亮灭。
实验结果表明,C51单片机可以准确地控制LED灯的亮度和闪烁频率,具有良好的稳定性和可靠性。
实验二:蜂鸣器控制实验
接着,我们将C51单片机与蜂鸣器连接起来,通过程序控制蜂鸣器的发声。
实验结果显示,C51单片机可以精准地控制蜂鸣器的音调和音量,具有较高的音频输出质量。
实验三:温湿度传感器实验
最后,我们将C51单片机与温湿度传感器连接起来,通过程序读取并显示温湿度数值。
实验结果表明,C51单片机可以准确地读取传感器的数据,并通过显示屏输出,具有良好的数据处理能力。
通过以上实验,我们验证了C51单片机在LED灯控制、蜂鸣器控制和温湿度传感器应用方面的性能和功能。
C51单片机具有较高的稳定性、可靠性和可编程性,适用于各种嵌入式系统的设计与开发。
希望本次实验报告能够对C51单片机的应用和研究提供一定的参考价值。
单片机实验报告范文
单片机实验报告范文单片机(Microcontroller)是指一种封装了微处理器(Microprocessor)、存储器和各种输入输出接口电路功能的集成电路。
单片机在电子设计与开发中有广泛应用,可以用于控制和监测各种系统和设备。
本实验报告将介绍在实验中使用单片机所进行的实验步骤和实验结果。
实验目的:1.理解单片机的基本工作原理和功能。
2.掌握单片机的编程和调试方法。
3.应用单片机实现简单的控制功能。
实验仪器和材料:1.单片机开发板2.计算机B数据线4.电源适配器5.LED灯6.麦克风模块7.温度传感器实验步骤:1.准备工作:将单片机开发板与计算机连接,接通电源适配器。
2.熟悉开发工具:安装单片机开发软件,并了解软件的基本功能。
3.学习编程语言:了解单片机的编程语言,例如C语言或汇编语言,并编写简单的程序。
4.硬件连接:将LED灯、麦克风模块和温度传感器连接至开发板的相应引脚。
5.编程实现:根据实验要求,编写相应的程序,控制LED灯、获取麦克风模块的声音信号或获取温度传感器的温度值。
7.实验结果:根据实验要求,记录LED灯的亮灭状态、麦克风模块的声音信号强度或温度传感器的温度数值。
实验结果:通过实验,我们成功地控制了LED灯的亮灭状态,获取了麦克风模块的声音信号强度和温度传感器的温度数值。
在编程实现过程中,我们学会了使用单片机编程语言,了解了一些常用的语法和函数。
在调试测试中,我们可以通过相关的输出或显示结果来判断程序的正确性,及时发现和修复错误。
实验总结:本实验通过单片机开发板和相应的硬件以及编程实现了简单的控制和监测功能。
通过实验,我们深入了解了单片机的基本工作原理和功能,并掌握了一些基本的编程和调试方法。
实验结果表明,我们成功实现了实验要求,并对单片机的应用有了更加深入的理解。
通过这次实验,我们不仅提高了动手实践能力,也增加了对科技发展的看法。
《单片机C语言程序设计》实验报告
《单片机C语言程序设计》实验报告
一、实验目的和要求
1、掌握protues7.10的安装及操作,掌握电路搭建方法,掌握仿真方法。
2、掌握keil uvision5的安装及操作,掌握新建工程项目,调试运行方法。
二、实验内容和原理
1、运行文件名为歌曲的实例,打开“歌曲.DSN”,运行给出的例子。
详细
操作过程参考《单片机实验一参考文档》P1和P2的描述。
2、参考《单片机实验一参考文档》中的P2-P4关于“三、protues软件
的界面与操作介绍”中的描述,了解protues软件的界面与操作。
3、使用protues软件绘制“流水灯”的原理图,并通过调试。
详细过程
参考《单片机实验一参考文档》的P4-P11,熟悉protues的使用。
4、使用Keil uVision5完成上述“流水灯”的程序设计。
步骤如下:
①新建工程项目,并选择好芯片
②建立c源程序文件
③编写流水灯程序文件,添加文件到当前项目组中及编译文件
④检查并修改源程序中的错误
三、主要仪器设备
Protues硬件仿真调试软件
Keil编程软件
四、操作方法与实验步骤
1、根据实验一新建工程操作,新建工程。
2、根据实验原理图链接Protues仿真电路图。
3、根据实验要求编写C程序。
4、通过Protues仿真调试,修改程序。
五、实验结果与分析。
单片机综合设计实验
单片机综合设计实验一、实验目的通过单片机的综合设计实验,加深对单片机原理和应用的理解,练习使用单片机进行控制和数据处理的能力。
二、实验内容设计一个模拟温度控制系统,要求能够通过单片机读取温度传感器的温度值,并根据设定的目标温度进行判断和控制,使得温度值稳定在目标温度附近。
即实现一个简单的闭环温度控制系统。
三、实验器材1.单片机:使用8051单片机2.温度传感器:使用LM35温度传感器3.显示器:使用数码管显示器4.控制器:使用电热器作为温度控制的对象,通过控制电热器的加热时间和加热功率来控制温度四、实验步骤1.连接电路将LM35温度传感器与单片机相连接,使得单片机能够读取到温度传感器的模拟信号。
将单片机与数码管显示器以及电热器相连接,使得单片机能够通过数码管显示温度值,并能够控制电热器的加热时间和加热功率。
2.编写程序根据实验要求,设计一个闭环温度控制系统的程序。
通过单片机读取温度传感器的温度值,并与设定的目标温度进行比较,根据比较结果控制电热器的加热时间和加热功率。
同时,将温度值通过数码管进行显示,使得操作人员能够实时监控温度的变化。
3.调试验证五、实验结果经过调试验证,实验结果表明设计的温度控制系统能够达到预期的效果。
单片机能够准确读取温度传感器的温度值,并根据设定的目标温度进行判断和控制,使得温度能够稳定在目标温度附近。
六、实验总结通过这次单片机综合设计实验,我对单片机的原理和应用有了更深入的理解。
通过实际操作和编程,我学会了如何连接温度传感器和数码管显示器,以及如何通过单片机对温度进行控制和显示。
同时,我还锻炼了解决问题和调试的能力,提高了实际应用技能。
这次实验不仅提供了实践的机会,也巩固了我对单片机的相关知识,为今后的学习和应用打下了坚实的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SETB TR1
;启动定时器
MOV P1, #00H
;置P1口初值
AA:
JBC TF0, TT0
;判定时器0溢出标志
BB:
JBC TF1, TT1
TT0: 值。
SJMP AA CPL P1.0 ; 定时溢出时TH0=TH1=00H,所以不用再预置初
SJMP BB
TT1:
CPL P1.1
SJMP AA
SJMP $
;数据起始地址 ;排序数据个数: 10个数,需要比较9次。
;取出一个数据 ;与第二个数进行比较 ;R0中的数小于R1中的数则跳转 ;R0中的数大于R1中的数, 交换数据
ORG 0000H LJMP MAIN
MAIN: LP1:
; LP2:
LP3:
ORG 0100H MOV R7, #09H CLR F0 MOV R0, #30H MOV R1, #31H MOV A, R7 MOV R6, A ;MOV A, R0 MOV R1, A ;INC R1 MOV A, @R0 CLR C SUBB A, @R1 JC LP3 MOV A, @R0 XCH A, @R1 MOV @R0, A SETB F0 INC R0 INC R1 DJNZ R6, LP2 JNB F0,NEXTT
;排序数据个数: 10个数 ;数据起始地址
;取出一个数据 ;与第二个数进行比较 ;R0中的数小于R1中的数则跳转 ;R0中的数大于R1中的数, 交换数据
数据输入输出I/O实验
1、 功能描述: 数字量由 P1口输入, P2口输出
数据输入输出I/O实验
1、 功能描述: 数字量由 P1口输入, P2口输出
;取表格首地址
MOV A, R7
;要计算的值
MOVC A, @A+DPTR ;查表
MOV R6, A
;结果保存
MOV P1, A
;在P1口接发光管显示
SJMP MAIN
;平方表
DB 00H, 01H, 04H, 09H, 16H
DB 25H, 36H, 49H, 64H, 81H
排序实验
实验内容: 在单片机片内 RAM 的 30H~39H 写入 10 个数, 编写实验程序,将这 10 个数按照 由小到大 的顺序排列,仍写入 RAM 的 30H~39H 单元中。
i = _crol_(i, 2);
for(x=0; x<0xFFFF; x++);
delay();
}
}
P1 = 0x00;
void int0_isr() interrupt 0
}
//INT0中断
void main()
{ unsigned char j;
{
P1 = 0x00;
for(j=0; j<4; j++)
ORG 0000H LJMP START
ORG 0100H
START: ORL P1, #0FFH
;P1口为输入
MOV A, P1
;读P1口的值
MOV P2, A SJMP STA
;输出到P2口
2、P1 口是 8 位准双向口,每一位均可独立定义为输入输出。编写实验程序, 将P1 口的低 4 位定义为输出,高 4 位定义为输入,数字量从 P1 口的高 4 位 输入,从 P1 口的低 4 位输出控制 发光二极管的亮灭。
END
/* 文件名: Timer.Asm
*/ void timer0_isr() interrupt 1
/* 功能描述: 使用定时器0及定时器1进行定时, {
*//*
在P1.0及P1.1上输出方波信号。
TH0 = 0x0F8;
*/ 中断法:
#include "SST89x5x4.h"
TL0 = 0x00;
ORG 0000H
LJMP START
START: MOV
ORG 0040H TMOD, #11H MOV TH0, #00H
;设置定时器工作方式为方式1 ;装入定时器0的计数初值
MOV TL0, #00H MOV TH1, #00H
;装入定时器1的计数初值
MOV TL1, #00H
SETB TR0
*/
/*
在P1.0及P1.1上输出方波信号。
*/
/**************************************/
#include "SST89x5x4.h" sbit Wave1 = P1^0; sbit Wave2 = P1^1;
//用查询法
while(1) { if(TF0 == 1) //定时器0溢出标志
ORG 0000H LJMP START
ORG 0100H
START:
ORL P1, #0F0H
;P1口高 4 位定义为输入
LOP:
MOV A, P1
;读P1口的值
SWAP A
; A的 (P1口)高低4位值交换
ORL A,#0F0H
; A(P1口)的高4位置1,高低4位不变
***跑马灯程序如下:***
TL1 = 0x00;
TR0 = 1;
//启动定时器0
{ TH1 = 0x0F8; TL1 = 0x00; Wave2 = ~Wave2;
TR1 = 1;
//启动定时器1
TF1 = 0;
}
}
}
功能描述: 使用定时器0及定时器1进行定时, */
/*
在P1.0及P1.1上输出方波信号。
参考例程如下:(查询法)
int n=2;
b=a << ( 8-n );
c=a >> n ;
a=c|b;
}
ORG 0000H LJMP START
ORG 0003H LJMP EINT0
ORG 0013H LJMP EINT1
START:
ORG 0040H MOV P1, #00H SETB IT0 SETB EX0 SETB IT1 SETB EX1 SETB EA SJMP $
;设置定时器工作方式为方式1 ;装入定时器0的计数初值
;装入定时器1的计数初值
;启动定时器
;置P1口初值
2、文件名: Count.C
*/
/* 功能描述: 将定时器/计数器1设定为计数器,计数器 */
/*
容量为10,每计数到10在P1.0上将取反一次。*/
/*****************************************/
;外部中断1中断服务程序
EINT1: MOV A, #03H MOV R7, #10H
ILP1: MOV P1, A RL A RL A ACALL DELAY DJNZ R7, ILP1 RETI
;延时子程序
DELAY: MOV R6, #0FFH DLP1: MOV R5, #0FFH DLP2: DJNZ R5, DLP2
#include <reg51.h>
void Delay() {
unsigned int i,j; for(i = 0; i < 1000; i++)
for(j = 0; j < 50; j++) ;
}
main() {
}
P1 = 1;
while(1)
{
P1 <<= 1;
//*P1=P1 << 1;
if(P1 == 0)P1 = 1;
Delay();
}
/* 文件名: Int2.Asm
*/
/* 功能描述: 手动控制外部中断INT0,INT1. INT0中断产生则
扩展P1口 */
/* 使LED闪烁4次, INT1中断产生则使LED流水显示4周.
*#/include "SST89x5x4.h"
void int2_isr() interrupt 2 //INT1中断
A, R7 A, #0F0H A A, @A+DPTR R6, A
;取待转换数的高 4 位 ;高 4 位与低 4 位交换 ;查表 ;高 4 位转换结果送 R2
ASCTAB:
SJMP
DB DB DB
MAIN
;设置断点观察结果
;ASCII 码表
30H, 31H, 32H, 33H, 34H
35H, 36H, 37H, 38H, 39H
/#*in*c*lu*d*e *"I*nt*ri*n*s.*h"**********{*fu*on*rs(*ijg=*n0e*;d*j<c*h1*a6r;*ij*=+0*+x*)0*3,*j*; *******
*v*oi*d *de*l*ay*(v/oid)
{ P1 = i;
//使LED流水显示
{ unsigned int x;
TR0 = 1;
//启动定时器0
TR1 = 1;
//启动定时器1
ET0=1;//开中断
ET1=1;
EA=1;
while(1);
}
//TF0 = 0; }
void timer1_isr() interrupt 3 {
TH1 = 0x0F8;
TL1 = 0x00;
Wave2 = ~Wave2;
//TF1 = 0; }
} }
功能描述: 使用定时器0及定时器1进行定时, 在P1.0及P1.1上输出方波信号。 (中断法:)
START: MOV TT0:
ORG 0000H LJMP START ORG 000BH LJMP TT0 ORG 001BH LJMP TT1 ORG 0040H TMOD, #11H MOV TH0, #00H MOV TL0, #00H MOV TH1, #00H MOV TL1, #00H SETB ET0 SETB ET1 SETB EA SETB TR0 SETB TR1 MOV P1, #00H SJMP $ CPL P1.0 RETI