单片机实验程序
单片机实验一拆字程序

单片机实验一拆字程序 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个必做实验
![[整理]单片机6个必做实验](https://img.taocdn.com/s3/m/1361a0cf7e192279168884868762caaedd33bac0.png)
第一部分软件实验实验一二进制到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”即可实现其功能。
- 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