SJMP rel指令16十进制颜色代码代码为80rel。求LOOP:SJMP LOOP程序的16十进制颜色代码代码

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。
CEPARK 助学开发板在线订购单片机实验程序 【范文十篇】
单片机实验程序
范文一:一
1.修改例程一的源程序
(1)将A寄存器的初值改为80H(正逻辑,数据位为1表示发光二极管点亮),再对源程序进行简单修改,使程序运行后发光二极管情况与修改前相同。
(2)将LED向左循环移位点亮改为向右循环移位点亮 (3)加快LED循环移位点亮的速度
$include (C.inc)
;C8051F02x系列单片机信息头文件包含伪指令
Init_Device
调用初始设置子程序
A,#080H赋初始值并在发光二极管上显示该数值
P3,A LOOP:
AA寄存器内容右移1位并送1发光二极管显示
LOOP ;无限循环
R5,#0H ;延时子程序 D1:
$include (Init_Device.inc);初始设置子程序文件包含伪指令
(3)可删除几个
DELAY语句即可加快循环速度
2.将例程二0——F的循环显示改为0——9的循环显示
$include (C.inc)
;C8051F02x系列单片机信息头文件包含伪指令
0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;字符段码表0-7 DB
080H,090H字符段码表8-F lcall
Init_D调用初始设置子程序
R1,#00H操作数据初始值
DPTR,#TAB ;读取与A中数值对应的显示段码 MOVC
A,@A+DPTR MOV
P5,A段码送并行口1显示 CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
DELAY CALL
R1操作数据(R1)增1 MOV
A,#0AH,MAIN;检查操作数据是否大于显示范围(F) SJMP
INIT1无限循环
R5,#0H延时子程序 MOV
R6,#0H DJNZ
$include (Init_Device.inc) ;初始设置子程序文件包含伪指令
1. 例程5程序修改
(1) 将KEY2、KEY4的功能对调
(2) 每次停下再启动以后,更改发光二极管点亮的循环方向
(C.inc)C8051F02x系列单片机信息头文件包含伪指令
INITIAL主程序入口
STOP外中断0服务程序入口,开始键(STAR)
STAR外中断1服务程序入口
停止键(STOP)
0100H INITIAL: LCALL
Init_D调用初始设置子程序
P3,#0FFH熄灭全部发光二极管
DPTR,#7F80H
@DPTR,A清除数码管2(NUM2)显示
A,#0FEH点亮发光二极管的初始数据
R1,#1H发光二极管点亮位置初值
IP,#04H设置INT0(开始键STAR)为高优先级
TCON,#05H外中断采用边沿触发
EX0INT1(停止键STOP)开中断
EA开放中断
EA关闭中断
R4, #0FH, LP
R4,#0FH,LP
R4,#0FH,LP
R4,#0FH,LP
R1,#8H,LOOP
R4,#0F0H,LOOP
R4,#0F0H,LOOP
R4,#0F0H,LOOP
R4,#0F0H,LOOP
LP停止键的中断服务程序 STOP:
ACC保护A寄存器内容
A,R1读取发光二极管点亮位置计数值
A,@A+DPTR ;获取发光二极管点亮位置计数值的显示段码
DPTR,#7F80H
@DPTR,A发光二极管点亮位置计数值的显示数据送显示
EX1INT0(启动键STAR)开中断
$等待重新启动条件--A=0
@DPTR,A清除数码管2(NUM2)显示
EX1禁止INT0中断(避免程序误动作)
ACC恢复A寄存器内容
IE1;清除INT1(停止键STOP)中断标志(避免程序误动作)
RETI中断返回启动键的中断服务程序 STAR:
A,#00H设置启动条件--A=0
IE0 ;清除INT0(启动键STOP)中断标志(避免程序误动作)
RETI中断返回
0C0H,0F9H,0A4H,0B0H,099H0--4段码
092H,082H,0F8H,080H5--8段码
R6,#0延时子程序 D1:
(Init_Device.inc)初始设置子程序文件包含伪指令
2. 修改例程6,将计数范围由0-F扩展至00-FF(使用定时器/计时器0),并在2位数码管上用10进制数显示计数结果(00-99)
(C.inc)C8051F02x系列单片机信息头文件包含伪指令 DP2
30H低位数值暂存器 DP_H
31H高位数值暂存器
Init_D调用初始设置子程序
TMOD,#BC/T0工作于方式2
A,#0显示初值为0
DISPLAY调用显示子程序显示初值0
TL0,#0C/T0置初值0
TR0启动计数器0
A,TL0读计数器0的计数值
DP_L,A在NUM2显示计数器0的计数值
DISPLAY调用显示子程序显示计数值
LOOP无限次循环
;显示子程序
A,DP_L读低位显示值
DECODE调用换码子程序
DPTR,#DP2显示段码送NUM2
A,DP_H读高位显示值
DECODE调用换码子程序
;换码子程序
0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;显示段码0-7
080H,090H,088H,083H,0C6H,0A1H,086H,08EH ;显示段码8-F
$include (Init_Device.inc)初始设置子程序文件包含伪指令
通过对例程8的程序进行修改和上机调试,改变源程序的 功能 (1) 将发送1、2、3、4的ASCII码改为发送A、B、C、D的
(2) 将接收的第2、第3字节数据的显示位置交换
(C.inc)C8051F02x系列单片机信息头文件包含伪指令 NUM2
EQU 07F80HNUM2地址 NUM3
EQU 07F90HNUM3地址 NUM4
EQU 07FA0HNUM4地址 NUM5
EQU 07FB0HNUM5地址 TIM_L
0FDHT/C1低字节计数值 TIM_H
0FDHT/C1高字节计数值
REC_BUF0 EQU 32H数据接收缓冲器0 REC_BUF1 EQU 34H数据接收缓冲器1 REC_BUF2 EQU 33H数据接收缓冲器2 FLAG
01H数据发送完成标志
MAIN转主程序
RECE转串行通信中断程序主程序 MAIN:
Init_DC8051F02x系列单片机信息头文件包含伪指令
MOV A,#0FFH
MOV DPTR,#NUM2
MOVX @DPTR,A清除数码管NUM1的显示
MOV DPTR,#NUM3
MOVX @DPTR,A清除数码管NUM2的显示
MOV DPTR,#NUM4
MOVX @DPTR,A清除数码管NUM3的显示
MOV DPTR,#NUM5
MOVX @DPTR,A清除数码管NUM4的显示
MOV R6,#0通信操作状态寄存器清除
MOV SP,#40H堆栈栈底设置
TMOD,#BT/C1方式2
TH1,#TIM_HT/C1重装填值
TL1,#TIM_LT/C1计数值
TR1启动T/C1
SCON0,#B串口方式1
ES串口中断允许
CALL ;主循环
KEYBOARD调用案件状态分析子程序
MOV A,#0FFH,L0
A,R7 A,#40H
LOOP中断服务程序 TI,REC1
R6,#0,REC2 A,#43H,REC6
;按键状态发生变化转L0
;按键状态无变化,清除发送完成标志
;数据发送完成,返回主循环 ;否则,键值暂存R7 ;C
;发送字符C的ASCII码值 ;O
;发送字符O的ASCII码值 ;M
;发送字符M的ASCII码值 ;K
;发送字符K的ASCII码值 ;发送数字0的ASCII码值
;生成键值的ASCII码值 ;发送键值的ASCII码值 ;置位发送完成标志
;非发送转接收处理
;否则,清除发送中断标志 ;中断返回保护累加器A读接收缓冲器
;接收状态为0,进行字符C的过滤处理;接收状态改为1
SJMP REC2:
SJMP REC3:
SJMP REC4:
CALL REC5:
RETI KEYBOARD: MOV
MOV REC6 R6,#1,REC3
A,#4FH,REC5
REC6 R6,#2,REC4 A,#4DH,REC5
REC6 R6,#3,REC6 ACC
A,#REC_BUF0 A,R5 R0,A
R5,#0,REC6 DISPLAY
K5 A,#0FFH接收状态为1,进行字符O的过滤处理 ;接收状态改为2 ;接收状态为2,进行字符M的过滤处理 ;接收状态改为3 ;数据接收计数器设置为3 ;接收状态为3,暂存接收的内容 ;生成接收数据存放缓冲器地址 ;恢复接收数据至A寄存器 ;保存接收的数据 ;接收数据计数器减1 ;接收数据计数器减为0,进行接收结果的显示;接收状态恢复为0(就绪状态) ;恢复累加器A清除接收中断标志 ;中断返回读按键状态输入端口 ;KEY1有效键值移入位累加器C ;键值无效转KEY2键值的分析 ;否则,KEY1代码送A寄存器 ;KEY2有效键值移入位累加器C ;键值无效转KEY3键值的分析 ;否则,KEY2代码送A寄存器 ;KEY3有效键值移入位累加器C ;键值无效转KEY4键值的分析 ;否则,KEY3代码送A寄存器 ;KEY4有效键值移入位累加器C ;键值无效转按键无效处理 ;否则,KEY4代码送A寄存器 ;按键无效代码送A寄存器
DISPLAY: MOV A,REC_BUF2读取接收的第2字节数据
SWAP A高、低4位交换
ANL A,#0FH分离高4位有效数值
CALL DECODE换码
MOV DPTR,#NUM2
MOVX @DPTR,A在数码管NUM2显示第2字节数据高4位数值
A,REC_BUF2 ;读取接收的第2字节数据
ANL A,#0FH提取低4位有效数值
CALL DECODE换码
MOV DPTR,#NUM3
MOVX @DPTR,A在数码管NUM3显示第2字节数据低4位数值
MOV A,REC_BUF1读取接收的第3字节数据
SWAP A高、低4位交换
ANL A,#0FH分离高4位有效数值
CALL DECODE换码
MOV DPTR,#NUM4
MOVX @DPTR,A在数码管NUM4显示第3字节数据高4位数值
MOV A,REC_BUF1读取接收的第3字节数据
ANL A,#0FH提取低4位有效数值
CALL DECODE换码
MOV DPTR,#NUM5
MOVX @DPTR,A在数码管NUM5显示第3字节数据低4位数值
RET------ DECODE
PROGRAM -------
DECODE: MOV DPTR,#TAB
MOVC A,@A+DPTR
RET------ DELAY
------ DELAY:
MOV R5,#80H D1:
MOV R6,#0H
0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
080H,090H,088H,083H,0C6H,0A1H,086H,08EH
$include (Init_Device.inc)初始设置子程序文件包含伪指令
范文二:单片机实验程序
1.定时器及中断实验
#define uchar unsigned char
#define uint unsigned int
void delay()
for(x=100;x>0;x--)
for(y=110;y>0;y--);
uchar a,b;
TMOD=0x01;
TH0=()/256;
TL0=()%256;
while(flag==0);
if(m==100)
void timer0() interrupt 1 using 0
TH0=()/256;
TL0=()%256;
else {flag=1;
void exter0() interrupt 0 using 1
if(INT0==0)
if(INT0==0)
void exter1() interrupt 2 using 2
if(INT1==0)
if(INT1==0)
2.定时器控制二极管
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
TMOD=0x01;
TH0=()/256;
TL0=()%256;
P1=table[num];
void exter0() interrupt 1
{ TH0=()/256;
TL0=()%256;
if(num==8) num=0;
P1=table[num];
3.时钟综合实验
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char m,sec,
void delay()
{ unsigned char x,y;
for(x=100;x>0;x--)
for(y=50;y>0;y--);
void main()
TMOD=0x01;
P0=tab[sec%10];
P0=tab[sec/10];
P0=tab[min%10];
P0=tab[min/10];
void timer() interrupt 1 using 1
if(sec==60)
if(min==60)
void srv0() interrupt 0 using 0
if(INT0==0)
if(min==60)
void srv1() interrupt 2 using 2
if(INT1==0)
4.PC发送到单片机
void main()
{ SCON=0x50;
TMOD=0x20;
/* {/* while(!RI);
if(a==0x55)
SBUF=0x41;
while(!TI);
void srv() interrupt 4
if(a==0x55)
SBUF=0x41;
while(!TI);
void main()
{ SCON=0x40;
TMOD=0x20;
SBUF=0x55;
while(!TI);
#define PIN0 XBYTE[0x7ff8]
#define PIN1 XBYTE[0x7ff9]
void main(void)
float resuit0,result1;
float resuit0_reg,result1_
byte i,j,k;
for(i=0;i<2;i++)
else PIN1=0;
for(k=0;k<255;k++);
resuit0_reg=PIN0;
else result1_reg=PIN1;
resuit0=resuit0_reg*5/255;
result1=result1_reg*5/255;
范文三:实验一
掌握汇编语言测试和调试方法。
把7000H的内容拆开,高位送7001H的低位,低位送7002H的低位,7001H、7002H高位清零,本程序应用于把数据送显示缓冲区。
开始菜单 程序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。
DPTR,#7000H
MOVX A,@DPTR
ANL A,#0FH
MOVX @DPTR,A
ANL A,#0FH
MOVX @DPTR,A
CWORD1: SJMP CWORD1
修改源程序,实现将把3000H的内容拆开,高位送3001H的低位,低位送3002H的低位,7001H、7002H高位清零。用存储器读写方法将3000H单元内容置成76H。
实验结果分析
向存储器7000H单元写入34H,执行程序,检查拆字后7001H、7002H单元中的内容为03H、04H。
向存储器3000H单元写入76H,执行程序,检查拆字后7001H、7002H单元中的内容为07H、06H。
范文四:MCS-51单片机实验源程序
仅供参考。没有最好,只有更好!希望大家设计出更好的程序来。
硬件实验一 并行口输入、输出
//P2做输出口,接8只LED,编写程序,使LED循环点亮(流水灯)
//内部函数_crol_,_cror_等的头文件
void Delay(unsigned int x)
//延时函数
while(x--)
for(i=0;i<123;i++);
void main()
Delay(500);
//在12MHz晶振下,延时约500ms
a=_crol_(a,1);
//循环左移,_cror_为循环右移
//P3.2和P3.3做输入口,分别接两个拨动开关到GND;P2.7~P2.4做输出口,接4只LED,用来指示两个开关的闭合状态组合
void main()
//读入P3口状态
//a中只保留P3.3、P3.2的值,其余位清零
if(a==0x0C) P2=0x7F;
//P3.3=1开,P3.2=1开,则P2.7=0亮
if(a==0x08) P2=0xbF;
//P3.3=1开,P3.2=0合,则P2.6=0亮
if(a==0x04) P2=0xdF;
//P3.3=0合,P3.2=1开,则P2.5=0亮
if(a==0x00) P2=0xEF;
//P3.3=0合,P3.2=0合,则P2.4=0亮
//用一个共阳七段数码管循环显示0-9和A-F,每个数显示0.5s
char code TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳数码管段码
void Delay(unsigned int x)
//延时函数
while(x--)
for(i=0;i<123;i++);
void main()
//位选信号
for(j=0;j<16;j++)
P0=TABLE[j];
Delay(500);
硬件实验二
//通过外部中断0(下降沿触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,流水灯开启,再按一次,灯熄灭
//内部函数_crol_,_cror_等的头文件
bit LED=0;
//位变量LED用于记录流水灯的状态,0为关闭,1为开启
void Delay(unsigned int x)
//延时函数
while(x--)
for(i=0;i<123;i++);
void INT0_srv(void) interrupt 0
//INT0中断号为0
Delay(10);
//延时10ms,去抖动
if(INT0==0) LED=!LED;
//每次中断时切换LED开启或关闭
void main()
//下降沿触发
//允许INT0中断
Delay(500);
//在12MHz晶振下,延时约500ms
a=_crol_(a,1);
//循环左移,_cror_为循环右移
//通过外部中断0(低电平触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0(P3.2)引脚的按钮,流水灯开启,再按一次,灯熄灭
//内部函数_crol_,_cror_等的头文件
bit LED=0;
//位变量LED用于记录流水灯的状态,0为关闭,1为开启
void Delay(unsigned int x)
//延时函数
while(x--)
for(i=0;i<123;i++);
void INT0_srv(void) interrupt 0
//INT0中断号为0
Delay(10);
//延时10ms,去抖动
if(INT0==0) LED=!LED;
//每次中断时切换LED开启或关闭
while(INT0==0);
//如P3.2(INT0)还是0,则等待,变为1后才从中断返回 }
void main()
//低电平触发
//允许INT0中断
Delay(500);
//在12MHz晶振下,延时约500ms
a=_crol_(a,1);
//循环左移,_cror_为循环右移
硬件实验三
定时计数器
//用单片机内部定时器方式计时,实现每一秒钟P2口输出状态发生一次反转。 //设置定时器溢出时间为50ms,溢出20次则为1s
//12MHz晶振下,内部每个计数脉冲为1us,50ms则需要50000个脉冲
//在定时器方式1下初值为
unsigned char count=20;
//定时溢出次数
void T0_int(void) interrupt 1
//T0中断号为1
TH0=()/256;
//每次溢出重新置初值
TL0=()%256;
if(count==0)
//溢出20次,即1s
void main()
TMOD=0x01;
//T0内部定时,方式1
TH0=()/256;
TL0=()%256;
//允许T0中断
//循环等待
unsigned char count=20;
//定时溢出次数
void main()
TMOD=0x01;
//T0内部定时,方式1,由TR0启动
TH0=()/256;
TL0=()%256;
while(!TF0);
//等待定时溢出
//溢出标志清零
TH0=()/256;
//溢出重新置初值
TL0=()%256;
if(count==0)
//溢出20次,即1s
//单片机对从P3.4(T0)输入的脉冲信号计数,T0工作于方式1,将计数结果送至P2口显示(二进制形式)
//由于输出低电平时LED亮,故需反转后输出
void main()
TMOD=0x05;
//T0外部计数,方式1,由TR0启动
//置初值(可省略)
//将计数值实时送P2口显示,未考虑TH0
硬件实验四
//单片机甲用于串行发送,单片机乙用于接收。甲向乙发送0-9和A-F共16个数。 //乙接收这16个数存放到数组,然后依次用一个接在P0口的共阳七段数码管显示出来,每个数显示时间约0.5s
//单片机甲发送程序(查询方式)
Keil中需单独建一个项目
#define uchar unsigned char
void main()
uchar i=0;
TMOD=0x20;
TL1=0 /*设置定时器T1为方式2*/ /*波特率9600*/
SCON=0x40;
/*串口方式1只发送,不接收*/
/*启动T1*/
for(i=0;i<16;i++)
//循环16次,依次发送0-F
/*数据送串行口发送缓冲器*/
while(TI==0); /*如果TI=0,未发送完,循环等待*/
/*已发送完,再把TI清0*/
//单片机乙接收程序(中断方式)
Keil中需单独建一个项目
#define uchar unsigned char
uchar sc=0,a[16];
//数组a存放接收到的数据,sc为数组下标
char code TABLE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳数码管段码
void Delay(unsigned int x)
//延时函数
while(x--)
for(i=0;i<123;i++);
void SI_int(void) interrupt 4
//串行口中断号为4
//接收到一帧数据
a[sc]=SBUF;
void main()
uchar i=0;
TMOD=0x20;
TL1=0 /*设置定时器T1为方式2*/ /*波特率9600*/
SCON=0x50;
/*串口方式1,允许接收*/
/*启动T1*/
//数码管位选信号
{if(sc>=16)
//接收到16个数后,循环显示
for(i=0;i<16;i++)
//循环16次,依次显示a[0]-a[15]
P0= TABLE[a[i]];
Delay(500);
//发生外部中断0(下降沿触发)时,单片机从串行口输出字符串"Hello"; //发生外部中断1(下降沿触发)时,单片机从串行口输出字符串"SCUT!"。
char sa[]="Hello",sb[]="SCUT!";
void INT0_srv(void) interrupt 0
//INT0中断号为0
for(i=0;i<5;i++)
//循环5次,依次发送各字符
SBUF=sa[i];
/*数据送串行口发送缓冲器*/
while(TI==0); /*如果TI=0,未发送完,循环等待*/
/*已发送完,再把TI清0*/
void INT1_srv(void) interrupt 2
//INT1中断号为2
for(i=0;i<5;i++)
//循环5次,依次发送各字符
SBUF=sb[i];
/*数据送串行口发送缓冲器*/
while(TI==0); /*如果TI=0,未发送完,循环等待*/
/*已发送完,再把TI清0*/
void main()
TMOD=0x20;
TL1=0 /*设置定时器T1为方式2*/ /*波特率9600*/
SCON=0x40;
/*串口方式1只发送,不接收*/
/*启动T1*/
IT0=1;IT1=1;
//INT0,INT1
EX0=1;EX1=1;EA=1;
下降沿触发 允许INT0,INT1中断
范文五:实验一:Keil软件使用实验
start:CPL P1.0
ACALL delay
AJMP start
delay:MOV R3,#5
DEL1:MOV R2,#200
DEL2:MOV R1,#125
DEL3:DJNZ R1,DEL3
DJNZ R2,DEL2
DJNZ R3,DEL1
实验二:基本I/O口控制实验
1)8个LED灯循环点亮
MOV A,#0FEH
ACALL delay
AJMP START
delay:MOV R3,#5
DEL1:MOV R2,#200
DEL2:MOV R1,#125
DEL3:DJNZ R1,DEL3
DJNZ R2,DEL2
DJNZR3,DEL1
实验四:外部中断实验
//调用本征函数库
uchar unsigned char
unsigned int
sbit BEEP=P1^5;
//定义位变量
sbit KEY1=P3^3;
uchar temp,b;
uchar aa,i;
void begin();
//声明初始化函数
void main()
//延时加循环
void delay(uint);
//调用初始化函数
//点亮第一位LED
for(i=0;i<7;i++)
delay(1000);
aa=_crol_(aa,1);
void delay(uint xms)
//延时函数
for(i=i>0;i--)
for(j=110;j>0;j--);
void begin(
//初始化函数
void int01()
interrupt 2
//中断函数
{ temp=P1;
///现场保护
while(~KEY1)
//按键发声
BEEP=~BEEP;
for(b=200;b>10;b--);
实验五:定时器应用实验
1)利用定时器控制8个LED循环点亮
#define uchar unsigned char
#define uint unsigned int
uchar num,
void main()
TMOD = 0x01;
TH0=()/256;
TL0=()%256;
void T0_time( ) interrupt 1
TH0=()/256;
TL0=()%256;
if(num==20)
aa=_crol_(aa,1);
//选择定时器T0,方式1(M1MO为01)//方式1为16位的,装高8位初值 //装低8位初值 //开总中断
//开T0中断 //启动T0
//方式1不能自动重装初值,需重新装//num每加一次判断一次是否到20次 //如果到了20次 说明1S时间到
2)利用定时器产生1HZ方波
#define uchar unsigned char
#define uint unsigned int
sbit LED=P1^0;
//定义位变量,让P^0作为输出口
void main( )
TMOD=0x01;
TH0=()/256;
TL0=()%256;
if(num==10)
//如果到了500ms 让LED取反,就产生了方波信号
void T0_time ( ) interrupt 1
TH0=()/256;
TL0=()%256;
实验六:LED显示实验
1)点亮1位LED数码管
sbit com1=p3^2;
Void main( )
//位选,显示字符‘E’
2)采用查表法扫描4位LED数码管(此程序李琦老师上课讲过)
#define uchar unsigned char
#define uint unsigned int
sbit com1=p3^2;
//定义段选位变量
sbit com2=p3^3;
sbit com3=p3^4;
sbit com4=p3^5;
uchar code
Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0x
c6,0xa1,0x86,0x8e};
uchar dispBuf[]={1,2,3,4};
//数码管缓冲区
void main( )
for(i=0;i<4;i++)
//for循环,执行让一个数码管亮
P1=Tab[dispBuf[i]];
case0:com1=0;com2=1;com3=1;com4=1;
case1:com1=1;com2=0;com3=1;com4=1;
case2:com1=1;com2=1;com3=0;com4=1;
case3:com1=1;com2=1;com3=1;com4=0;
delayms(5);
void delay(uint xms)
//延时函数
for(i=i>0;i--)
for(j=110;j>0;j--);
实验七:键盘读取实验
1)按行扫描
# define uchar unsigned char
# define uint unsigned int
uchar code Ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
void delayms(uint xms);
void main()
if(temp!=0xbf)
delayms(10);
if(temp!=0xbf)
switch(temp)
case 0xbb:P3=Ledtab[1];
case 0xb7:P3=Ledtab[2];
case 0xaf:P3=Ledtab[3];
case 0x9f:P3=Ledtab[4];
while(temp!=0xbf)
if(temp!=0x7f)
delayms (10);
if(temp!=0x7f)
switch(temp)
case 0x7b:P3=Ledtab[5];
case 0x77:P3=Ledtab[6];
case 0x6f:P3=Ledtab[7];
case 0x5f:P3=Ledtab[8];
while(temp!=0x7f)
void delayms(uint xms)
uchar i,j;
for(i=i>0;i--)
for(j=110;j>0;j--);
2)按列扫描
# define uchar unsigned char
# define uint unsigned int
uchar code Ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
void delayms(uint xms);
void main()
//第一列为零
if(temp!=0xfb)
//判断是否有键按下
delayms(10);
//延时去抖
if(temp!=0xfb)
//再次判断是否有键按下
switch(temp)
case 0xbb:P3=Ledtab[1];
case 0x7b:P3=Ledtab[5];
while(temp!=0xfb)
//判断按键是否释放
{temp=P1;}
//第二列为零
if(temp!=0xf7)
delayms (10);
if(temp!=0xf7)
switch(temp)
case 0xb7:P3=Ledtab[2];
case 0x77:P3=Ledtab[6];
while(temp!=0xf7)
{ temp=P1;}
//第三列为零
if(temp!=0xef)
delayms (10);
if(temp!=0xef)
switch(temp)
case 0xaf:P3=Ledtab[3];
case 0x6f:P3=Ledtab[7];
while(temp!=0xef)
{ temp=P1;}
//第四列为零
if(temp!=0xdf)
delayms (10);
if(temp!=0xdf)
switch(temp)
case 0x9f:P3=Ledtab[4];
case 0x5f:P3=Ledtab[8];
while(temp!=0xdf)
void delayms(uint xms)
uchar i,j;
for(i=i>0;i--)
for(j=110;j>0;j--);
实验八:串并转换实验 李琦 #include
#define uchar unsigned char #define uint unsigned int
sbit CLK=P1^1;
sbit DAT=P1^0;
void delayms(uint xms ); void so164(uchar x); void main( )
so164(tmp);
delayms(1000) ;
tmp=_crol_(tmp,1);
void delayms(uint xms ) {
for(i=i>0;i--)
for(j=110;j>0;j--); }
void so164(uchar x)
uchar temp,i;
for(i=0;i<8;i++)
if(temp&0x80==0x80)
temp=temp>>1;
实验九:串口通信实验
1)向PC机发送U
# define uchar unsigned char
# define uint
unsigned int
# define FOSC ul
# define T1_H 256-(FOSC/12/32/9600)
# define T1_L 256-(FOSC/12/32/9600)
void initsys();
uchar x= 0;
void delayms(uint xms);
void main()
initsys();
SBUF = 'U';
if(TI == 1)
SBUF = 'U';
delayms (1000);
void initsys()
//定义晶振频率//发送U //初始化函数
SCON=0x50;
TMOD = (TMOD & 0x0f)|0x20;
TH1 = T1_H;
TL1 = T1_L;
//开串口中断
//开总中断
//启动定时器T1
void delayms(uint xms)
for(i=i>0;i--)
for(j=110;j>0;j--);
2)发送U接收A
# define uchar unsigned char
# define uint
unsigned int
# define FOSC ul
# define T1_H 256-(FOSC/12/32/9600)
# define T1_L 256-(FOSC/12/32/9600)
void initsys();
void main()
initsys();
if(RI == 1)
//等待接收
if(x==0x55)
SBUF = 0x41;
if(TI == 1)
//等待发送
//清除发送标志
void initsys()
SCON=0x50;
TMOD = (TMOD & 0x0f)|0x20;
TH1 = T1_H;
TL1 = T1_L;
//串口方式1
范文六:三.程序清单及程序流程框图
DJNZ R2,A1
DPTR ,#4800H
DPTR ,#4800H
DPTR,#5800H
DPTR,#5800H
三.实验电路
四.程序清单及流程图
#3CH #0B0H #14H #0feH A NT A
#3CH #0B0H
程序二只需将程序一中“RL A”改为“RR
A”即可实现其功能。 程序三
LJMP MAIN:
NT: SETB NT0:JNB
TMOD, #01H
TH0, #3CH TL0,
#0AH 01H R1,
程序四(思考题程序)
TMOD, #01H 00H EA ET0 TH0,
#14H TR0 A,
R3 NT TH0, #3CH TL0,
三.电路原理图
四.程序清单及流程图
MAIN: MOV TMOD,
END 程序二 ORG
HERE: LJMP
0000H MAIN 000BH IPTO SP,
TR0 P1.1 HERE P1.1
#60H #02H #82H #88H #88H
程序三(思考题)
MAIN: MOV TMOD,
HERE1: JNB
#0FEH #0D4H #0FFH #38H
#0FFH #38H
#0FEH #0D4H
五.实验结果
周期为200us方波
周期为240us方波
周期为500us占空比为2:5的方波
三、电路原理图
四、程序清单及流程图
程序1:ORG 0000H
MAIN: MOV TMOD, #06H
MOV TH0, #9CH
程序2:ORG
MAIN: MOV SP,
MOV TMOD, #06H
MOV TH0, #38H
HERE:LJMP HERE
程序3(思考题):
MAIN: MOV SP,
ITPO:CPL P1.1
#62H #9CH #9CH #0CEH #0CEH #88H
五、实验结果
程序1与程序2从T0接入1000Hz的方波,思考题从P1.0口线产生的方波从T1接入
计100次脉冲
计200次脉冲
思考题波形
三、电路原理图
四、程序清单及流程图
程序一:ORG
DELAY:SETB
RET EXTER0:LCALL
MAIN 0003H EXTER0 000BH IPTO 00013H EXTER1 SP,
#60H TMOD, #11H IE,
#02H TH0, #9EH TL0,
#58H TH1, #0D8H TL1,
#0F0H HERE TR1 TF1,
HEREY TR1 TF1 TH1, #0D8H TL1,
#0F0H DELAY
P1.0, LOOP0
P1.0, HERE0
LOOP0:RETI
EXTER1:LCALL DELAY
P1.1, LOOP1
P1.1, HERE1
LOOP1:RETI
MOV TH0, #9EH
END 程序二(思考题)
LJMP EXTER0
MAIN: MOV SP,
MOV TMOD, #11H
MOV TH0, #0B1H
MOV TH1, #0D8H
HERE:LJMP HERE
DELAY:SETB TR1
HEREY:JNB TF1,
MOV TH1, #0D8H
RET EXTER0:LCALL DELAY
P1.0, LOOP0
HERE0:JNB P1.0, HERE0
IPTO: DJNZ R1,
LOOP2: MOV
#03H LOOP R1,
#02H TH0, #0B1H TL0,
五、实验结果
1、基本要求部分:将程序产生的十六进制代码加载到proteus中,运行仿真开始无波形输
出,按下K0键输出周期为50mS的连续方波,如图5.1所示,当按下K1键波形消失,重复操作结果一样。
2、思考题部分:将程序产生的十六进制代码加载到proteus中,运行仿真开始无波形输出,按下K0键输出周期为100mS占空比为2:5的连续矩形波,如图5.2所示,当再次按下K0键波形消失,重复操作结果一样。
三、电路原理图
四、程序清单及流程图
程序一:ORG 0000H
MAIN:LCALL DELY
TMOD, #02H
DPTR, #7FFFH
MOVX @DPTR, A
TR0 LOOP0: MOV
DPTR, #7FFEH
MOVX @DPTR, A
INTO:PUSH DPL
DPTR, #7FFCH
MOVX @DPTR, A 程序二(思考题):
ACC DPH DPL
MAIN:LCALL DELY
DPTR, #7FFFH
DPTR, #7FFEH
@DPTR, A LOOP0: MOV
DPTR, #7FFFH
#00H LOOP1: MOVX
LCALL DELY
LCALL DELY
DELY:MOV R4,#0FFH
LOOP3:MOV R5,#0FFH
DJNZ R5,LOOP
DJNZ R4,LOOP3
五、实验结果
1、基本要求部分:将程序产生的十六进制代码加载到proteus中,运行仿真可以在示波器中看到如图6.1所示波形,当按下k0键时可以看到D4点亮,同理按下K1键,D5点亮,按下K2键,D6点亮,按下K3键,D7点亮。
2、思考题部分:将程序产生的十六进制代码加载到proteus中,运行仿真开始二极管全部熄灭,然后从上倒下依次循环点亮。
三、实验电路
四、程序清单及流程图
#define uchar unsigned char #define uint unsigned int
sbit smg0=P2^0; sbit smg1=P2^1; sbit smg2=P2^2; sbit smg3=P2^3;
unsigned char code smg_we[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uchar zs,xs,ad_ void delay_1ms(void);
void ad(void); void display(void);
void delay(uint t);
/******************************主函数************************************/ void main()
ad_data=*dr_ {while(1)
ad_data=ad_data*1.963125; {uchar xdata *dr_
zs=ad_data/100;
xs=ad_data%100;
dr_ad=0xfff7;
display() ;
delay(15);//延时100us
/*****************************延时1ms函数********************************/ void delay_1ms(void)
for(j=19;j>0;j--);
uchar j,t;
for(t=100;t>0;t--) }
/******************************延时子函数*********************************/ void delay(uint t) {
while(t--);
/******************************显示子函数**********************************/ void display(void) {
P1=smg_we[xs%10]; smg0=1; smg1=0; smg2=0; smg3=0; delay_1ms();
P1=smg_we[xs/10];
smg0=0; smg1=1; smg2=0; smg3=0; delay_1ms();
P1=smg_we[zs%10]&0x7f;
smg0=0; smg1=0;
delay_1ms();
delay_1ms();
程序二:查询方式只需将主函数中的延时改为一个while循环语句,条件为AD中EOC引
脚接的单片的口线为1即可。
程序三:主函数中将总中断和外部中断0开启,将取数据部分放到中断服务程序中,中断服
务程序如下。
/************************中断服务函数************************************/
void ad(void)interrupt 0 using 0
uchar xdata *dr_
dr_ad=0xfff7;
ad_data=ad_data*1.963125;
五、实验结果
将程序产生的十六进制代码加载到proteus中,运行仿真,调节滑动变阻器改变AD输入的电压,可以到如图7.1—7.4所示的实验结果。
三、实验原理电路图
四、程序清单及流程图
#define uchar unsigned char #define uint u
unsigned char code zxb_daima[]={0x7F,0x85,0x8B, 0x92,0x98,0x9E,0xA4,0xAA,0xB0,0xB6, 0xBB, 0xC1, 0xC6, 0xCB,0xD0,0xD5, 0xD9,0xDD,0xE2,0xE5,0xE9,0xEC,0xEF, 0xF2,0xF5, 0xF7, 0xF9,0xFB, 0xFC,0xFD,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFD,0xFC,0xFB,0xF9,0xF7, 0xF5, 0xF2,0xEF,0xEC,0xE9,0xE5,0xE2,0xDD, 0xD9,0xD5,0xD0,0xCB, 0xC6,0xC1, 0xBB, 0xB6, 0xB0,0xAA,0xA4,0x9E,0x98,0x92,0x8B,0x85,0x7F,0x79,0x73,0x6C,0x66,0x60,0x5A,0x54,0x4E,0x48,0x43,0x3D,0x38,0x33,0x2E,0x29, 0x25, 0x21,0x1C,0x19,0x15,0x12,0x0F,0x0C, 0x09, 0x07,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x09,0x0C,0x0F,0x12,0x15,0x19,0x1C,0x21,0x25,0x29,0x2E,0x33,0x38,0x3D,0x43,0x48,0x4E,0x54,0x5A,0x60,0x66,0x6C,0x73,0x79};//正弦波数据代码
/****************************延时10ms函数**********************************/ void delay_10ms(void)
{for(j=190;j>0;j--);
{ uchar j,t; }
for(t=100;t>0;t--) }
/********************************延时子函数***********************************/
void delay(uint t) {
while(t--);
*******************************取键值子函数*********************************/ uchar key_data(void)
return (i);
/**********************判键子函数*****************************************/ uchar key(void) } { delay_10ms(); uchar i,d; i=key_data(); i=key_data(); while(i!=0) if(i!=0) {delay_10ms(); {delay_10ms(); i=key_data(); i=key_data(); } if(i!=0) i=d; {i=key_data(); } d=i; } while(i!=0) return (i); {delay_10ms(); } i=key_data();
/************************方波产生函数*****************************************/ void fangbo(void)
{uchar xdata *dr_ for(i=63;i>0&&jz!=1;i--) uchar i,j=0;
{dr_da=0 for(i=63;i>0&&jz!=1;i--)
/********************锯齿波产生函数*******************************************/ void juchibo(void)
*dr_da=j; {uchar xdata *dr_
j=j+4; uchar i,j=0;
for(i=63;i>0&&jz!=2;i--)
/********************三角波产生函数*******************************************/ void sanjiaobo(void)
jz=key(); {uchar xdata *dr_
} uchar i,j=0;
for(i=63;i>0&&jz!=4;i--) for(i=63;i>0&&jz!=4;i--)
/**************************正弦波产生函数*************************************/ void zhengxianbo(void)
*dr_da=zxb_daima[j]; {uchar xdata *dr_
j++; uchar i,j=0;
jz=key(); for(i=128;i>0&&jz!=8;i--)
/**************************梯形波产生函数*************************************/ void tixingbo(void)
{uchar xdata *dr_
uchar i,j=0;
for(i=63;i>0&&jz!=16;i--)
for(i=63;i>0&&jz!=16;i--)
for(i=63;i>0&&jz!=16;i--)
for(i=63;i>0&&jz!=16;i--)
/********************************主函数*************************************/
void main() {
uchar xdata *dr_
{jz=key();
switch(jz)
case 1:jz=0;while(jz==0){fangbo();}
case 2:jz=0;while(jz==0){juchibo();}
case 4:jz=0;while(jz==0){sanjiaobo();}
case 8:jz=0;while(jz==0){zhengxianbo();}
case 16:jz=0;while(jz==0){tixingbo();}
五、实验结果
将程序产生的十六进制代码加载到proteus中,运行仿真按下K0键得到如图8.1所示方波,按下K1键得到如图8.2所示锯齿波,按下K2键得到如图8.3所示三角波,按下K3键得到如图8.4所示正弦波,按下K4键得到如图8.5所示梯形波。
范文七:通信误错电源,通信电缆:,端设口置
仿真
器 置
设 真 仿器:la6b00通用0微控 制mc51
s
信设置通co:1m 测试串 口

存保名称(as.m)新建,目项(加入模块件文保,项存)目编译,,运(F8行步运行),单关闭项
目关闭目,打项项开目,编,运行,译
实一:验CMS1单片5开机发环境应用的
rg o0 000h
rmovr 0,#04
h
omva,#0 0h
m
vo 1,#r1h0
m
v @o0r,a
11将.数存储据的4器0H4~FH的容赋值成00H~0FH,并将内04~HFH4内的容体复制整到5H05FH~
。RO 00G00
LJHP MSATR
T
MTVO R0#,04
HOV MA,0H
#
OMVR0 ,40H#
M
V OR,15#0
MOHVB ,#0H
A
DD A@,0R
OVM R1@A
,I
1
2将.据存储器数40H~的4H的F容赋值内00H成0~FH并将,两两相之和送加50H到5~7H的据数间中。
空OGR 000h0
A
ROG0 010
HM
SUBB A @,1
JNCRL OO1
PM
1OVMA,@R 1
S
OLOOP:MO1 AV@R,3
OOL2P:JNC RD2LOO,
POV M@R,A0

二 MC验-5S汇1语言编型算典程序法设

.1将从2044~发出F1的6个乱杂无序数进的行大到小从排的序
O
HTART:SMV A,O#4H0
即立传数送到累加器
加累传送到器存寄器
CRLA 累加器零清
DE CA累加减1

接间址寻传到累加器

MOV A,@R位1
S
BU A,B3R
累器内加容去减寄器存容内
移STE B0 F
ETS CB进位位置'1'
3XCHA ,@1 R   间接址寻累加器交换和
D
C E1R     寄 器减存
1XCH
I
C NR  1    
LO
PO:1MOVA @,1
RDJZNR5 L,OPO 寄 存器减1,为不则零转
移BJ 0,FSTRA T 若 直接址位为寻1则移转
将2由两个ASCI表示I数(1的6进转化制成进制2
) 0位4存低置位8 4位1置存高位 8转化结果放到42 处
实验三单 片机I/实O验2(时)学
31.1口P作出口输,接八只发光二管极,编写序程,发光使极二管环循亮点

M
O P1,V0#0H
MOO V P,A1
ACAL LEDALY
M
VO 0R#0,H
0M
JDZ R0,LNL
JND R1Z,LL
3.21P0,P1..作为1输口接两个入拨开动,关1.P2,P.3作输1出接两口个发二极光,编管程写
序读取开关状,态此将状态在光发二管极上显出示。
MOV
P1, #0H3
MOV
O VP,A
1AJ
单 片定机时器验(实2学)时
用CU内P部时器方式计时,实现每秒定输钟出态发状一生翻转次。
AMJ P S ATTR
STAR
T MOV TMOD,:01H#
M
O BV,#AH0
L
OPO :ETBSTR0
NJBTF ,L0OPO
H0T,3CH#
MOV
HJDZN B,OOLP
C
LP 1.0
P
JMPS SATRT
E
验五实单片 中断机实验(学2时)
.5用1单次脉冲请中申,在中断断处理程序中对出输信号进翻转行。
LHJMP MIAN
LJMP0ITO P
0MAI:N ETB SA E
HEER: SMP HJRE
IETP: OPL PC10.
5.2用单次脉申请中冲,断要求程序中每对中次断进计数行,将并计数果显示在结光发极管二。
O上RG0 00H
AOG R0030
H
ORG 100H0
M
AIN:SE BT EA
ESTBEX 0
SE
BT T0
IMOV
OV P1MA
,R
实六验 单 机综片合实(4学验)时
本验实拟交模通号信控灯制,一情般下正常况显示当有,救急到达时车,两个向方通交号灯信全红,以让便急车救过。通设救车通急路口时间过为10秒急。救通车后,交过恢通复常正本实验。需另用台一C机上的串P口调助试(手超或级终)端送“1发,表示有”救车通过。急
;
序功能是程利用一台P另C通机过口串送发意字任表示有符急救车到来当有,救急到来时车,路的口4个都等亮秒5
,;
后然续继两个亮灯两灯灭个的口的正路常态状正常,状是每态秒3钟信号换切一;次7R为代1表急救有通车,过为0表正示状态
;常要的硬件连线有P需1.0~1P4连.发二极光管,片单的机3P0.P3与1.连EXB5仿真1旁边的板XD与RXTD
;实验
中波的率特2是40,需0要TH将1,TL1设置为03H,FPOCN=80。H
;(
实中验的波特是11率,所以0H1,TTL设1置为72,HPONC00H。=波率特越小误,越小)差
ORGT 00BH0
LMJ PTMEI
0OR
STBE P1.
1CLR
M
VOSP ,60H
#MVOT OM,D#21H
MO VLT0#,00B
MHV OHT0#0,3C
HM
OV 0R,3#
0MO
OV M7R#0,
H
CALA LRECV
CWNJ ER7#0H,,SS
OJDZ R0,TNMEIOUT
M
OV 0R,30
#
M:O TLV,0#0B0H
OMV T0,H#30H
C
DJ
N Z2RTI,EOMUT
OVMR2 ,50
#MO
MOV R
,#7H
V OT1H#0,FA
H;MO
VT L1#0F,AH
MO TV1H,0F#3H
M
OV LT,1#0FH
3M
V POON,C#80H
OV MSCON,#05H
OM IEV,#92
PSUH CC
ACLR
MO
V SBF,AU
J
M
OV P1,#0FH
MO
R7V,01#
HS
片机C单语言验实(2学)时
71.用利ITN中断0对1P.0脚引翻做转,使灯小循亮、灭。
#环niculde
bis LEt =D 1^0P;
itb LDEBu;
//定 个位

oid xtEnIt() 0ntierupt 0 r //定义函 数EtIxn
使用外中t断
L{DEuBf = !LEDBu;f
LED= L EDufB
vidomain ()
EDBuLf = 0;
= 0 0x1 ; / /外部断中下降0触沿
打/外部中开允断许(位EX0)及中断总允许(位E)A
w
ilhe 1( );
72对I.NT中0断数进行计数次将计数,果通过结1P送到发口二极光上管显
#示inclued
oi dEtIxn0() itnterrptu0
ovdimai ()
// 外部中 0断降沿触下发
// 开打部外断中许位(允E0)及X总断允许位(EA)
中wihle ()1;
变成部外中1断
:#inc
od ixtEnI0t( )niterrutp 2
oivdma n(i)
=/ 外/中断0下部沿触发降
I
/ /开打外部断允中许(位EX)及总0中允断许位(A)
wEihl (e1) ;
范文八:单片机实验一 ORG 0000H
MAIN: MOV R2,#16
MOV R0,#30H
MOV DPTR,#1000H
LOOP1:MOV A,@R0
MOVX @DPTR,A
DJNZ R2,LOOP1
MOV R2,#16
MOV R0,#30H
MOV DPTR,#1000H
LOOP2:MOVX A,@DPTR
MOV 50H,@R0
CJNE A,50H,WRONG
DJNZ R2,LOOP2
SJMP RESULT
WRONG:SETB C
RESULT:NOP
END 实验二 1、 乘法
EXTRN CODE (Display8,GetBCDKey) BUFFER1 DATA 30H
BUFFER2 DATA 40H
BCDU EQU 50H
BINB EQU 52H
BINA EQU 60H
MAIN: CLR PSW.1
MOV R0,#BUFFER1
MOV A,#08H
LCALL GetBCDKey
MOV 50H,30H
MOV 51H,31H
LCALL DTOB;十进制转十六进制
MOV 54H,52H
MOV 55H,53H
MOV 50H,32H
MOV 51H,33H
LCALL DTOB;十进制转十六进制
MOV 56H,52H
MOV 57H,53H
MOV R1,54H
MOV R0,55H
MOV R3,56H
MOV R2,57H
LCALL FMUL;十六进制乘法
MOV 60H,R4
MOV 61H,R5
MOV 62H,R6
MOV 63H,R7
LCALL BTOD;十六进制转十进制
MOV BINA,R3
MOV BINA+1,R2
MOV BINA+2,R1
MOV BINA+3,R0
MOV R6,#04H
MOV R0,#60H
MOV R1,#70H
LCALL DECOMP
MOV R0,#BUFFER2
MOV BUFFER2+7,70H
MOV BUFFER2+6,71H
MOV BUFFER2+5,72H
MOV BUFFER2+4,73H
MOV BUFFER2+3,74H
MOV BUFFER2+2,75H
MOV BUFFER2+1,76H
MOV BUFFER2,77H
LCALL Display8
CLR A;十进制转十六进制
MOV BINB, A
MOV BINB+1, A
MOV A, BCDU
LCALL MLADD
MOV A, BCDU
LCALL MLADD
MOV A, BCDU+1
LCALL MLADD
MOV A, BCDU+1
LCALL MLADD
ANL A,#0FH
MOV A, BINB
MOV B, #10
MOV BINB,A
MOV A, BINB+1
MOV B, #10
MOV BINB+1, A
ADD A, BINB
MOV BINB, A
ADDC A, BINB+1
MOV BINB+1, A
MOV R6,#00H;十六进制乘法MOV R7,#00H
CLR A;十六进制转十进制MOV R0, A
MOV R7, #32
BTOD1:MOV A, BINA
ADD A, BINA
MOV BINA, A
MOV A, BINA+1
ADDC A, BINA+1
MOV BINA+1, A
MOV A,BINA+2
ADDC A,BINA+2
MOV BINA+2,A
MOV A,BINA+3
ADDC A,BINA+3
MOV BINA+3,A
DJNZ R7,BTOD1
MOV A,@R0;压缩bcd码转非压缩bcd码 SWAP A
ANL A,#0FH
ANL A,#0FH
DJNZ R6,DECOMP
END 2、 排序 ORG 0000H
MAIN: MOV R7,#15
LOOP1:PUSH 07H
MOV R0,#30H
MOV R1,#31H
SJMP LOOP2
LOOP4:DEC R7
SJMP LOOP1
LOOP2:MOV A,@R0
SUBB A,@R1
LOOP3:INC R0
DJNZ R7,LOOP2
JB F0,LOOP4
单片机实验三
1、EXTRN CODE(GetbcdkEY,Display8) BUFFER1 DATA 40H
BUFFER2 DATA 60H
MOV R0,#BUFFER1
MOV A,#06H
LCALL GetBCDKey
MOV 20H,#20
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
ITOP:PUSH PSW
MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ 20H,LOOP
MOV 20H,#20
MOV A,#01H
CJNE A,#60H,LOOP
MOV 40H,#00H
MOV A,#01H
CJNE A,#60H,LOOP
MOV 41H,#00H
MOV A,#01H
CJNE A,#24H,LOOP
MOV 42H,#00H
LOOP:MOV R0,#40H
MOV R6,#03H
MOV R1,#50H
DECOMP:MOV A,@R0
ANL A,#0FH
ANL A,#0FH
DJNZ R6,DECOMP
MOV R0,#BUFFER2
MOV BUFFER2,51H
MOV BUFFER2+1,50H
MOV BUFFER2+2,53H
MOV BUFFER2+3,52H
MOV BUFFER2+4,55H
MOV BUFFER2+5,54H
MOV BUFFER2+6,#10H
MOV BUFFER2+7,#10H
LCALL Display8
2、EXTRN CODE(GetBCDKey,Display8) BUFFER1 DATA 40H
BUFFER2 DATA 60H
MOV R0,#BUFFER1
MOV A,#06H
LCALL GetBCDKey
MOV 20H,#200
MOV 21H,#15
MOV TMOD,#02H
MOV TL0,#38H
MOV TH0,#38H
ITOP:PUSH PSW
DJNZ 20H,LOOP
MOV 20H,#200
DJNZ 21H,LOOP
MOV 21H,#15
MOV A,#01H
CJNE A,#60H,LOOP
MOV 40H,#00H
MOV A,#01H
CJNE A,#60H,LOOP
MOV 41H,#00H
MOV A,#01H
CJNE A,#24H,LOOP
MOV 42H,#00H
LOOP:MOV R0,#40H
MOV R6,#03H
MOV R1,#50H
DECOMP:MOV A,@R0
ANL A,#0FH
ANL A,#0FH
DJNZ R6,DECOMP
MOV R0,#BUFFER2
MOV BUFFER2,51H
MOV BUFFER2+1,50H
MOV BUFFER2+2,53H
MOV BUFFER2+3,52H
MOV BUFFER2+4,55H
MOV BUFFER2+5,54H
MOV BUFFER2+6,#10H
MOV BUFFER2+7,#10H
LCALL Display8
3、EXTRN CODE(GetBCDKey,Display8)
BUFFER1 DATA 40H
BUFFER2 DATA 60H
MOV R0,#BUFFER1
MOV A,#05H
LCALL GetBCDKey
MOV 20H,#20
MOV TMOD,#02H
MOV TL0,#38H
MOV TH0,#38H
ITOP:PUSH PSW
DJNZ 20H,LOOP
MOV 20H,#5
MOV A,#01H
CJNE A,#10H,LOOP
MOV 40H,#00H
MOV A,#01H
CJNE A,#10H,LOOP
MOV 41H,#00H
MOV A,#01H
CJNE A,#10H,LOOP
MOV 42H,#00H
MOV A,#01H
CJNE A,#10H,LOOP
MOV 43H,#00H
MOV A,#01H
CJNE A,#10H,LOOP
MOV 44H,#00H
LOOP:MOV BUFFER2,40H
MOV BUFFER2+1,41H
MOV BUFFER2+2,42H
MOV BUFFER2+3,43H
MOV BUFFER2+4,44H
LCALL Display8
单片机实验四 1、ORG
2、ORG 0000H
MAIN: MOV SP, #60H
MOV TMOD, #10H
MOV TH1, #0FFH
MOV TL1, #0E8H
MOV SCON, #50H
MOV PCON, #80H
MOV R0, #41H
MOV R7, #10H
SINT: CLR RI
MOV A, SBUF
MOV @R0, A
DJNZ R7, L1
IT1P: CLR TR1
MOV TH1, #0FFH
MOV TL1, #0E8H
3、ORG 0000H
MAIN: MOV SP, #60H
MOV TMOD, #20H
MOV TH1, #0E8H
MOV TL1, #0E8H
MOV SCON, #0D0H
MOV PCON, #80H
MOV R0, #31H
MOV R7, #0D0H
SINT: CLR TI
MOV A, @R0
MOV TB8, C
MOV SBUF, A
DJNZ R7, L1
4、ORG 0000H
MAIN: MOV SP, #60H MOV TMOD, #20H
MOV TH1, #0E8H
MOV TL1, #0E8H
MOV SCON, #0D0H
MOV PCON, #80H
MOV R0, #41H
MOV R7, #0D0H
SINT: CLR RI
MOV A, SBUF
JNB RB8, ERR
L1: JB RB8, ERR
L2: MOV @R0, A
DJNZ R7, L3
ERR: SETB P1.0 //点亮LED L3: RETI
5、ORG 0000H
MAIN: MOV SP, #60H
MOV TMOD, #20H
MOV TH1, #0E8H
MOV TL1, #0E8H
MOV SCON, #0D0H
MOV PCON, #80H
MOV R0, #41H
MOV R7, #0D0H
SINT: CLR RI
MOV A, SBUF
JNB RB8, ERR
L1: JB RB8, ERR
L2: MOV @R0, A
DJNZ R7, L3
ERR: SETB P1.0 //点亮LED L3: RETI
6、ORG 0000H
MAIN: MOV SP, #60H
MOV TMOD, #20H
MOV TH1, #0E8H
MOV TL1, #0E8H
MOV SCON, #0F0H
MOV PCON, #80H
MOV R0, #41H
MOV R7, #0D0H
L1: CLR RI
MOV A, SBUF
JNB RB8, ERR
L2: JB RB8, ERR
L3: MOV @R0, A
DJNZ R7, L1
ERR: SETB P1.0 //点亮LED
END 单片机实验七 1、;开头需定义
P1.0 ;数据线
P1.1 ;时钟线
MAIN: MOV R7,#04H
L1: PUSH ACC
MOV A,#0A8H
LCALL START
LCALL Write_8bits
LCALL Acknowledge
MOV R0,#30H
LCALL Write_8bits
LCALL Acknowledge
MOV R1,#31H
LCALL Write_8bits
LCALL Acknowledge
LCALL STOP
MOV R4,#100
MOV R5,#100
MOV R6,#100
DJNZ R6,DEL3
DJNZ R5,DEL2
DJNZ R4,DEL1
DJNZ R7,L1
Delay_Time
Delay_Time
Delay_Time
Delay_Time
RET写8位,入口:A
Write_8bits: MOV
Write_8bits_1: RLC
Delay_Time
Delay_Time
Write_8bits_1
;读8位,出口:A
Read_8bits: MOV
#8 Read_8bits_1: CLR
Delay_Time
Read_8bits_1
RET从机应答
Acknowledge: SETB
Delay_Time
$ ;接收端应答标志:将SDA置低
Delay_Time:
2、;开头需定义
SDA BIT P1.0 ;数据线
SCL BIT P1.1 ;时钟线
MOV R7,#14H
L1: PUSH ACC
LCALL Start
MOV A,#0A8H
LCALL Write_8bits
LCALL Acknowledge
MOV R0,#40H
LCALL Write_8bits
LCALL Acknowledge
Read_Current:
LCALL Start
MOV A, #0A9H
LCALL Write_8bits
LCALL Acknowledge
LCALL Read_8bits
MOV R1,#41H
LCALL Stop
DJNZ R7,L1
LCALL Delay_Time
LCALL Delay_Time
LCALL Delay_Time
LCALL Delay_Time
;写8位,入口:A
Write_8bits: MOV R7, #8
Write_8bits_1: RLC A
LCALL Delay_Time
MOV SDA, C
LCALL Delay_Time
DJNZ R7, Write_8bits_1
RET ;读8位,出口:A
Read_8bits: MOV R7, #8
Read_8bits_1: CLR SCL
LCALL Delay_Time
MOV C, SDA
DJNZ R7, Read_8bits_1
RET从机应答
Acknowledge: SETB SDA
LCALL Delay_Time
JB SDA, $ ;接收端应答标志:将SDA置低CLR SCL
Delay_Time: RET
范文九:灯1:实现了灯光的全灭全开
P1,A输出至P1口
DELAY调用延迟子程序(延迟100毫秒)
R4,#255延迟子程序(100毫秒)
99倒计时 实现倒计时从50开始
000HORG伪指令使用于程序定位
TIMER0定时0中断入口地址
SP,#40H设定堆栈指针
TMOD,#01H设定定时器1为工作方式1
TH0,#HIGH()
TL0,#LOW()
TIMER0:PUSH
ACC定时器1中断服务子程序
TH0,#HIGH()
TL0,#LOW()
R7,TIM0_LP
MIAO,TIM0_LP
TIM0_LP: MOV
SCANLED,SCAN_L1
P2,#B显示十位
P2,#B显示个位
END_SCAN: MOV
DPTR,#TABLE
BIN_BCD: MOV
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
3,按键控制灯光
实现了灯P1.0~P1.3由前4个按键控制,而P1.4~P1.7每两个分别由后两个控制。
START: mov
KEY,$等候按键!
lcall delay
SW1,$wait key is released
WAIT2: ;JB
KEY,$等候按键!
lcall delay
SW2,$wait key is released
WAIT3: ;JB
KEY,$等候按键!
lcall delay
SW3,$wait key is released
WAIT4: ;JB
KEY,$等候按键!
lcall delay
SW4,$wait key is released
WAIT5: ;JB
KEY,$等候按键!
lcall delay
SW5,$wait key is released
WAIT6: ;JB
KEY,$等候按键!
lcall delay
SW6,$wait key is released
;check all 6 key ,light correspond LEDs, edit by htq
keydat equ 22h
START: mov
KEY,$等候按键!
if some key is down, then the bit is 0
anl a,#0fch
mov keydat,
the down key is 1
;some key is down
jb keydat.7,sw1sw1 is down
jb keydat.6,sw2sw2 is down
jb keydat.5,sw3sw3 is down
jb keydat.4,sw4sw4 is down
jb keydat.3,sw5sw5 is down
jb keydat.2,sw6sw6 is down
sjmp nokey
sjmp nokey1
sjmp nokey1
sjmp nokey1
sjmp nokey1
sjmp nokey1
djnz r2,d2
4,串口灯光左移
实现了在串口发送情况下的灯光左移。
NUM EQU 20H
MOV NUM,#00H
START:MOV SCON,#50H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
LOOP: MOV DPTR,#TABLE
MOVC A,@A+DPTR
RET1:INC NUM
CALL DELAY
CLRA0:MOV NUM,#00H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
DELAY:MOV R7,#50
D1:MOV R6,#20
D2:MOV R5,#248
DJNZ R6,D2
DJNZ R7,D1
TABLE:DB B
END ;4.8kbps
范文十:单片机试验程序
实验一:用程序使AT89C51单片机的P1.0~P1.7引脚循环输出高电平,经反相器后控制小灯循环点亮。
void delay();
void main()
P1=0x00; delay();
P1=0x01; delay();
P1=0x02; delay();
P1=0x04; delay();
P1=0x08; delay();
P1=0x10; delay();
P1=0x20; delay();
P1=0x40; delay();
P1=0x80; delay();
void delay()
{ int i=0;
while(i<10000) i++;
实验二:147页,例题6.1
unsigned char n=0x01;
int_0()interrupt 0
if(n==0) n=0x01;
实验三:154页例题6.6
sbit P1_0=P1^0;
char count=20;
t0_int() interrupt 1
if(count==0)
P1_0=! P1_0;
例题6.5,153页
#include //包含特殊功能寄存器声明头文件
sbit P1_0=P1^0; //定义特殊功能位P1_0
TMOD=1; //设置定时/计数器0工作于方式1
TL0=0xF0; //装入计数初值
TR0=1; //启动定时器T0
ET0=1; //允许定时器T0中断
//开放CPU中断
t0_int() interrupt 1
//中断函数
P1_0=! P1_0;
//P1.0取反
//重新装入计数初值
实验四:三首歌
/**********硬件连线*************/
//用导线将P1.0口连接"电子音响驱动控制"模块的"SIN"输入插孔
sbit P1_0=P1^0;
#define mvar
/2//对晶振为11.0592MHz进行12分频后,为机器周期的倒数,再除以2定时时间到P1口反向
//为了通过计数器让P1.0发出一定频率的方波,要求:
(12/fosc)*(65536-X)x2=1/f.因而16位计数初始值X=600/12/2)/f
//因而把(/2)预定义
#define uint unsigned int
#define uchar unsigned char
//freq[]为发出dao-xi即1-7(又分低音和高音)频率表
uint code freq[]={4,330,349,392,440,494,523,578,659,698,784,880,988};//单位Hz uchar code yinfu[]=
{0x64,0xa2,0xc1,0xa2,0x62,0x84,0x61,0x81,
0x61,0x81,0xa4,0xa1,0x91,0xa1,
0x81,0x64,0xa2,0xc1,0xd2,0xd2,0xd2,0xa2,
0xc4,0xa1,0xc1,0xa1,0xc1,0xd2,0xd2,0xd2,0xa2,
0xc4,0xc2,0x62,0xc2,0x62,0xa2,0xa2,
0x84,0x00};//音符表高4位音阶,低4位代表该音节持续的拍数,猪八戒背媳妇*/ /*uchar code yinfu[]=
{0x64,0x62,0x52,0x64,0x84,0x92,0xa1,0x91,
0x82,0x92,0xa8,0x62,0xd2,0xd2,
0xc2,0x92,0xa1,0x91,0x82,0x22,0xa8,0x08,
0x82,0x62,0x62,0x82,0x94,0x52,0x52,0xa2,0xc2,
0xa2,0x92,0x88,0x62,0x82,0x92,0xa2,
0x92,0x82,0x52,0x32,0x68,0x00};//最炫民族风*/
/*uchar code yinfu[]=
{0x02,0x52,0x62,0x82,0xc2,0xa4,0x92,0xa5,
0xa2,0xa8,0x04,0x82,0x91,0xc1,
0xc2,0xa2,0x92,0x82,0x82,0x92,0x82,0x82,
0x88,0x04,0x82,0x91,0xc1,0xc2,0xa2,0x92,
0x82,0x92,0x92,0x91,0xa1,0x62,0x64,0x62,
0x82,0x92,0x92,0x91,0xa1,0x82,0x02,0x62,
0x51,0x61,0x52,0x54,0x54,0x54,0x54,0x00};//怒放的生命*/
uchar high,low,temp1,temp2,temp3,
timer0() interrupt 1 using 1
/* T0中断服务程序 */
P1_0=!P1_0;
void Delay();//声明延时函数
main() //_at_ 0x30
TMOD=0x01;
/* 定时器0方式1 */
开CPU中断 */
开T0中断 */
next:temp1=yinfu[count];
if(temp1==0)
{ temp2=(temp1&0x0f);//原来用temp2=(temp1&&0x0f)是错误的;注意&是按位与, //而&&是逻辑与
temp1>>=4;}
if(temp1==0)
goto w1; }
// temp1--;若将freq[]中的第一个数65535去掉,则需要增加该语句
high=(65536-mvar/(freq[temp1]))/256;
low=(65536-mvar/(freq[temp1]))%256;
for(;temp2>0;temp2--)
}//while(1)结束
}//main()结束
void Delay()//11.0592Mhz下延时0.250883秒
for(i=0;i<80;i++)//若想加快演唱节奏,可以修改成i<130或i<120
for(j=0;j<200;j++);
实验五:多机点对点串行通信,175页
//先运行乙机的接收程序,再运行甲机的发送程序;然后乙机复位,查看仿真上数据变化。 //甲机发送数据
unsigned char i=0;
SCON=0x40;
TMOD=0x20;
SBUF=DBYTE[0x30];
SBUF=DBYTE[0x30+i];
}while(i<10)
//乙机接收数据
unsigned char i=0;
SCON=0x50;
TMOD=0x20;
DBYTE[0x40+i]=SBUF;
}while(i<10)
实验六:八位数码管串行通信
//************连线说明**********
//(1)译码器输出插孔Y0接I/O口简单扩展区的273CS插孔;
//(2)I/O口简单扩展区的out0~out7排针接数码管显示区的code排针(从左至右为a,b,c,d,e,f,g,dp)
//(3)P1口排针接数码管区bit排针,P1.0对应bit排针最左边的排针bit0
//(4)用9芯的串行口线连接计算机背面的串行口与实验箱上的RS232通信模块的RS232/RS485插座
//(5)CPU系统I/O区的P3.0插孔接RS232通信模块的RXD_232插孔
//(6)CPU系统I/O区的P3.1插孔接RS232通信模块的TXD_232插孔
//**********功能说明**************
//(1)打开DVCC厂家开发的串口调试软件dvsio.exe,选择波特率BP2400及com1单选框 //然后单击"打开串行口"按钮,若能打开该串行口,该按钮会变成"关闭串行口"
//(2)单击keilc软件的'start/Stop Debug Session'工具按钮将代码下载到硬件仿真器,然后单击'运行'按钮
//(3)单击dvsio.exe界面右侧的"发送字符"区域的0到F按钮就可以通过串口向单片机发送字符了
//若选择com1口没有反应,再尝试选择com2单选框,然后再单击"打开串行口"按钮 //在数码管区会左移动显示通过串口调试软件dvsio.exe发送的字符
//实验表明dvsio.exe发送时不是ASCII码而是16进制数
//另外,还可以用DVCC厂家提供的COMView.exe工具发送字符.直接双击COMView文件内的COMView.exe
//在打开的'串口调试窗'中设置串行口com1,波特率2400,然后在该对话框中的'处理字符串'下方的输入框
//内输入要发送的字符串,比如"123456",然后单击该输入框内右侧的"发送"按钮,即可在数码管上显示出123456
//同时在'串口调试窗'中的'接收窗口'区显示出单片机发过来的234567
//注意:在输入框内不要输入双引号或单引号,因为单引号作为ascii码字符也会被发送
//还可以使用作者自己开发的8250.asm生成的8250.exe软件,该软件的使用详见8250.asm #include
#define X273 XBYTE[0x8000]//I/O口简单扩展模块的273CS2插孔接Y0(8000H) unsigned char code zixing[]=
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F void delay(unsigned int time);
void disp(void);
unsigned char rec_val,start=0;
//开辟了25个显示单元最多可以显示按下的25-8=17个键,0x40表示数码管的g段亮 unsigned char data buf[25]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0};
SM1=1; //串口方式1
REN=1; //允许接受
TMOD=0x20; //T1方式2,定时.GAT C/T M1 M0
//PCON=0x80;
TL1=0xF4;//系统晶振为Hz时波特率2400的常数
//TL1=0xE8;//系统晶振为Hz时波特率1200的常数
//TH1=0xE8;
EA=1;//开总中断
ES=1;//开串行口中断
}//main end
void serial_int(void) interrupt 4
rec_val=SBUF;//读取接收到的ASCII
SBUF=rec_val+1;//将接收到的值加1再发给上位机
if((rec_val>='0')&&(rec_val<='9'))
buf[start+8]=zixing[rec_val-0x30];//将ASCII码转化为数值并查表取得字形码
start=start+1;//刷新指针加1
else if((rec_val>='A')&&(rec_val<='F'))
buf[start+8]=zixing[rec_val-0x37];//将ASCII码转化为数值并查表取得字形码
start=start+1;//刷新指针加1
else if((rec_val>='a')&&(rec_val<='f'))
buf[start+8]=zixing[rec_val-0x57];//将ASCII码转化为数值并查表取得字形码
start=start+1;//刷新指针加1
else if((rec_val>=0)&&(rec_val<=15))//如果发送过来的数不是ASCII码,而是16进制数
buf[start+8]=zixing[rec_val];//将16进制数直接查表取得字形码
start=start+1;//刷新指针加1
TI=0;//若是发送中断要清发送中断标志
//否则会一直进入中断函数,造成主程序刷新数码管时的闪烁
void disp(void)
{ unsigned char i,temp2;
temp2=0xFE;//位选码
for(i=0;i<8;i++)
{ X273=buf[i+start];//字形码送74ls273锁存输出
P1=temp2;//送位选码
delay(5);//亮一段时间
P1=0xFF;//熄灭掉,否则会形成亮段码干扰
temp2=(temp2<<1)|0x01; //下一位位选码有效
void delay(unsigned int time)
unsigned int i,j;
for(i=0;i<i++)
for(j=0;j<10;j++);
实验七:键盘扫描。
//************连线说明**********
//(1)译码器输出插孔Y0接I/O口简单扩展区的273CS插孔;
//(2)I/O口简单扩展区的out0~out7排针接数码管显示区的code排针(从左至右为a,b,c,d,e,f,g,dp)
//(3)数码管区bit排针的最左边的一个针即bit0(对应最左边的数码管)接开关量输出插孔,开关拨向下方
//(4)P2.7~P2.4排针接4*4矩阵键盘的列排针KL,P2.7对应KL最左边的针KL3
//(5)P2.3~P2.0排针接4*4矩阵键盘的行排针KH,P2.3对应KH最左边的针KH3
//**********功能说明**************
//按下4*4矩阵键盘的键时,数码管区最左边的一个数码管显示按下的键
#define X273 XBYTE[0x8000]//I/O口简单扩展模块的273CS2插孔接Y0(8000H) unsigned char code zixing[]=
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F unsigned char code
HL_table[]={0xEE,0xDE,0xBE,0X7E,//0~3
0xED,0xDD,0xBD,0X7D,//3~7
0xEB,0xDB,0xBB,0X7B,//8~B
0xE7,0xD7,0xB7,0x77//C-F
void delay(unsigned int time);
unsigned char i,
unsigned char scan,HL_
scan=0xEF;
for(i=0;i<4;i++)
if(P2==scan)
scan=(scan<<1)|0x01;
delay(15);//12MHZ晶振下延时15ms
if(P2!=scan)
HL_code=P2;
for(keyval=0;keyval<16;keyval++)
if(HL_code==HL_table[keyval])
X273=zixing[keyval];
do{;}while(P2!=scan);
}//else end
}//for end
}//while end
}//main end
void delay(unsigned int time)
{ unsigned int i,j;
for(i=0;i<i++)
for(j=0;j<130;j++);
实验八:步进电机224页
# include void delay();
void main()
{unsigned char turn=0; while(1)
{if(turn<18)
P1=0x03;delay();
P1=0x06;delay();
P1=0x0C;delay();
P1=0x09;delay();turn=turn+1; }
turn=0;delay();delay(); while(1)
{if(turn<18)
{P1=0x09;delay(); P1=0x0C;delay(); P1=0x06;delay();
P1=0x03;delay();turn=turn+1; }
void delay()
while(k<7500)k++; }}

我要回帖

更多关于 sjmp loop 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信