一级a做爰片免费网站神马电影,云南省城乡住房建设厅官方网站,国内金融行业网站开发,上海发布公众号文章目录 实验一.3路跑马灯进行二进制数展示实验二.8个LED轮流显示(p1口连接LED)实验三.8-3译码器的使用实验四.简单程序设计2分频实验加减运算实验 实验五.中断系统实验(数码管共阳)10进制计数器8位数码管轮流显示固定数08位数码管上稳定显示0-7(位选P2 段选P0) 实验六.外部中… 文章目录 实验一.3路跑马灯进行二进制数展示实验二.8个LED轮流显示(p1口连接LED)实验三.8-3译码器的使用实验四.简单程序设计2分频实验加减运算实验 实验五.中断系统实验(数码管共阳)10进制计数器8位数码管轮流显示固定数08位数码管上稳定显示0-7(位选P2 段选P0) 实验六.外部中断实验数码管显示中断源编号中断设计10进制计数器 实验七.定时器实验定时器进行8个led灯轮流显示 汇编常用指令总结汇编常用模块代码总结延时1s查表数码管显示表 实验一.3路跑马灯进行二进制数展示 ORG 0000H ; 指定地址 0001--1LJMP MAIN ; 长转移 0010--2ORG 0080H ; 0011--3
MAIN: MOV P1,#0DBH ;11011011--零为亮 0100--4ACALL DELay ; 短调用 0101--5MOV P1,#06DH ;01101101 0110--6ACALL DELay ; 0111--7MOV P1,#0B6H ;10110110 1000--8ACALL DELay ; 1001--9AJMP MAIN ; 1010--A
delay: mov r7,#255 ;延时子程序 共1us 1011--B
d1: mov r6,#255 ; 255us 1100--C
d2: djnz r6,d2 ;255*255*2us 1101--Ddjnz r7,d1 ;255*2us 1110--Eret ;子程序结束 1111--Fend实验二.8个LED轮流显示(p1口连接LED) ORG 0000H ; 12个时钟周期等于1个机器周期 12/时钟频率 LJMP MAIN ; mov单周期djnz双周期ORG 0080H ; 1-8:P1口 9:RST复位 10-17:P3口 18:XTAL2出 19:XTAL1片内时钟振荡器入
MAIN: MOV P1,#0FEH ;11111110--零为亮 20:VSS 21-28P2口 29:PSEN 30:ALE/PROG 31:EA/VPP ACALL DELay ; 39-32P0口 40:VCCMOV P1,#0FDH ;11111101 1213:外部中断0/1 14,15:计时器0/1ACALL DELay ;MOV P1,#0FBH ;11111011ACALL DELay ;MOV P1,#0F7H ;11110111ACALL DELay ;MOV P1,#0EFH ;11101111ACALL DELay ;MOV P1,#0DFH ;11011111ACALL DELay ;MOV P1,#0BFH ;10111111ACALL DELay ;MOV P1,#07FH ;01111111ACALL DELay ;AJMP MAIN ;2kb内无条件跳转
delay: mov r7,#100 ;延时子程序 1us
d1: mov r6,#100 ;100us
d2: djnz r6,d2 ;100*100*2usdjnz r7,d1 ;100*2usretend实验三.8-3译码器的使用 ORG 0000HLJMP STARTORG 0080H
START: ;MOV P1,#0FFH; 开关闭合一开始开关都为高选中哪位哪位给低MOV P0,#0FFH; led全闭
MAIN: MOV A,P1CPL A ;取反CJNE A,#01H,NXET1;比较00000001不相等转移MOV P0,#0FEHLJMP MAIN
NXET1: CJNE A,#02H,NXET2;比较是否相等00000010MOV P0,#0FDHLJMP MAIN
NXET2:CJNE A,#04H,NXET3;00000100 MOV P0,#0FCHLJMP MAIN
NXET3:CJNE A,#08H,NXET4; 00001000MOV P0,#0FBHLJMP MAIN
NXET4: CJNE A,#010H,NXET5;00010000 16MOV P0,#0FAHLJMP MAIN
NXET5: CJNE A,#020H,NXET6; 00100000 32MOV P0,#0F9HLJMP MAIN
NXET6:CJNE A,#040H,NXET7;01000000 64MOV P0,#0F8HLJMP MAIN
NXET7:CJNE A,#080H,NXET ;10000000 128MOV P0,#0F7H ;00001000LJMP MAIN
NXET: MOV P0,#0FFH;00000000LJMP MAINEND 实验四.简单程序设计2
设计要求 1选择函数发生器输出TTL信号输入单片机的某I/O口经单片机分频后从另一I/O口输出I/O分配自定分频比范围1-10要求分频比在程序中可进行设置 2实现2位10进制有符号数0-49)的加、减运算按键K1选择加按键K2选择或运算LED指示运算结果。采用仿真器仿真运行数据输入采用存储器直接置数存储器分配自定。画出程序设计流程图程序必须加以注释。
分频实验
分频 P1.0主函数TTL输入 2khz 5vP0.0输出 ORG 0000H ; N个周期2N个边沿 N个正边沿 N个负边沿LJMP MAIN ;ORG 0080H ;
MAIN: MOV P1,#0FFH ;11111111
LOOP1: JB P1.0,LOOP1;检测下降沿JB直接寻址位为一则转移否则顺延INC A ;检测到一个下降沿ACALL CHECK
LOOP2: JNB P1.0,LOOP2;检测上升沿JNB直接寻址位为0则转移否则顺延INC A ;检测到一个上升沿ACALL CHECKAJMP LOOP1
CHECK: CJNE A,#02H,D1;检测到的周期个数与设定的分频系数比较2分频,不相等转移CLR A ;进位标志位清0CPL P0.0 ;直接寻址位取反
D1: RETEND 加减运算实验
加减运算p1接led 从上到下 位数从低到高 开关p2.7左低减 右高加 ORG 0000H ------ADDSUBBJBJNBLJMP MAIN ORG 0080H
MAIN:MOV R2,#22H ;参与加减的数可更改MOV R3,#05H ;参与加减的数可更改MOV A,#31H ;十进制的49
CHECK1: ;判断R2是否49 acc.7 为1则49SUBB A,R2 ;带借位 AA-R2-cyJNB Acc.7,CHECK2 ;为0转 否则顺延LJMP LOOP1
CHECK2: ;判断R3是否49 acc.7 为1则49SUBB A,R3 ;带借位 AA-R3-cyJB Acc.7,LOOP1 ;为1转 否则顺延
LOOP:JB P2.7,ADD1 ;P2.7为高电平则作加运算反之则作减运算LJMP SUBB1
ADD1: MOV A,R2 ;加ADD A,R3CPL A ;结果取反 led低电平亮MOV P1,ALJMP LOOP
SUBB1: MOV A,R2 ;减SUBB A,R3 ;AR2-R3JB Acc.7,SUBB2 ;R2R3顺序 否则跳CPL AMOV P1,ALJMP LOOP
SUBB2: MOV A,R3SUBB A,R2 ;r3-r2SETB Acc.7 ;直接置1CPL A ;取反MOV P1,A LJMP LOOPRET
LOOP1:MOV P1,#00H ;如果参与运算的数大于49则让所有的LED均亮RETEND
实验五.中断系统实验(数码管共阳)
10进制计数器
10进制计数器0-9间隔1秒软件延时自动加1并将计数值显示在一位数码管上P0连接一位数码管 ORG 0000H ; LJMP MAIN ;
MAIN: MOV P2,#0FEH ; 11111110这句不懂什么意思MOV R1,#00MOV DPTR,#0080H ; 便于将表中数读出MOV A,R1
LOOP1: CJNE A,#0AH,LOOP ; 比较数1010是否相等不相等跳转MOV R1,#00 ; 此时A10 重新赋0给AMOV A,R1LOOP: MOVC A,ADPTR ;将表中读出的数赋给AMOV P0,A ;在数码管显示ACALL DELay ;调用延时子程序INC R1 ;延时1s后寄存器加一MOV A,R1ACALL LOOP1 ;加一后进行比较
DElay: MOV R7,#10 ;延时子程序约 0.996s 1us 12mhz
DEL1: MOV R6,#200 ;1us
DEL2: MOV R5,#248 ;1usDJNZ R5,$ ;248*200*10*2usDJNZ R6,DEL2 ;200*10*2usDJNZ R7,DEL1 ;10*2usRET
ORG 0080H ; 数码管显示表
DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H; 0-9
END
8位数码管轮流显示固定数0 ORG 0000H ; ------延时数码管LJMP MAIN ;ORG 0080H ;
MAIN: MOV P0,#028H ; 数码管显示0 (可以改为其他数值)MOV P2,#0FEH; 11111110(第一个数码管亮)ACALL DELay ; 调用延时程序
LOOP: MOV A,P2 ; RL A ; 循环左移MOV P2,A ;ACALL DELay ; 调用子程序AJMP LOOP;
DElay: MOV R7,#10 ;延时子程序 约0.996s 1us
DEL1: MOV R6,#200 ;1us
DEL2: MOV R5,#248; 1usDJNZ R5,$; 248*200*10*2usDJNZ R6,DEL2;200*10*2usDJNZ R7,DEL1;10*2usRET
END8位数码管上稳定显示0-7(位选P2 段选P0) ORG 0000H ;程序的初始位置LJMP MAIN ;跳到程序的起始位置ORG 0100H
MAIN: MOV DPTR,#TABLE ; 将表文件头的地址赋给基址 MOV R3,#00H ; 将R3置0MOV P2,#0FEH ; 11111110
LOOP1: MOV A,#00HMOV A,R3 ; 将R3置给AMOVC A,ADPTR ;基址加变址查表内容赋给A MOV P0,#0FFHMOV P0,A ;将A给P0口INC R3acall delayMOV A,P2RL A ;循环左移MOV P2,#0FFHMOV P2,ACJNE R3,#8,LOOP1; 当0-7都赋完值8次顺序执行 否则跳转AJMP MAIN
DELAY: MOV R7,#20
DEL1: MOV R6,#50
DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 RET
TABLE: DB 028H,07EH,0A2H,62H,74H,61H,21H,7AH ;0-7END
(备用)ORG 0000H ;程序的初始位置LJMP MAIN ;跳到程序的起始位置ORG 0100H
MAIN:
MOV P2,#0FEH ;
MOV P0,#028H; 最左边一个显示0
ACALL DEALY
MOV P0, #0FFH
MOV P2,#0FDH ;
MOV P0,#07EH;第二个显示1
ACALL DEALY
MOV P0, #0FFH
MOV P2,#0FBH ;
MOV P0,#0A2H;第三个显示2
ACALL DEALY
MOV P0, #0FFH
MOV P2,#0F7H ;
MOV P0,#062H;第四个显示3
ACALL DEALY
MOV P0, #0FEH
MOV P2,#0EFH ;
MOV P0,#074H;第五个显示4
ACALL DEALY
MOV P0, #0FFH
MOV P2,#0DFH ;
MOV P0,#61H;第六个显示5
ACALL DEALY
MOV P0, #0FFH
MOV P2,#0BFH ;
MOV P0,#21H;第七个显示6
ACALL DEALY
MOV P0, #0FFH
MOV P2,#07FH ;
MOV P0,#7AH;第八个显示7
ACALL DEALY
AJMP MAIN
DELAY: MOV R7,#20
DEL1: MOV R6,#50
DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET END
实验六.外部中断实验
数码管显示中断源编号
通过K01JP37产生外部中断请求/INT0信号K02产生外部中断请求/INT1信号在对应的中断服务程序实现在一位数码管上显示中断源编号0或1。 按键K01接 P3.2 按键K02 接P3.3 这里跳沿触发 ORG 0000H -----外部中断0外部中断1LJMP MAINORG 0003H ;外部中断口0的地址入口LJMP INT_0 ;长调用外部中断0ORG 0013H ;外部中断口1的地址入口LJMP INT_1 ; 长调用外部中断1ORG 0080H
MAIN: MOV SP,#30H ;堆栈指针 保护断点SETB EA ;打开中断总开关SETB EX0 ;打开外部中断0SETB EX1 ;打开外部中断1SETB IT0 ; 跳沿触发SETB IT1 ; 跳沿触发SJMP $ ;跳转到本指令起始位置开始执行即循环执行等待中断
INT_0: CLR EX0 ;保护过程关外部中断0PUSH PSW ;现场保护PUSH ACC ; 压入数据进RAMSETB EX0 ; 打开外部中断0LCALL DELAY ;调用延时10ms去抖动 JB P3.2,RETURN1 ;若K0为高电平则跳出 中断低有效MOV P0,#28H ;否则数码管显示0
RETURN1: CLR EX0; 保护过程关外部中断0POP ACC ;现场恢复POP PSWSETB EX0RETI
INT_1:CLR EX1 ;关外部中断1PUSH PSW ;现场保护PUSH ACCSETB EX1 ; 打开外部中断1LCALL DELAY ; 调用延时10ms去抖动JB P3.3,RETURN2 ;若K1为高电平则跳出MOV P0,#7EH ;否则会数码管显示1
RETURN2: CLR EX1POP ACC ;现场恢复POP PSWSETB EX1RETI
DELAY:MOV R7,#100 ;延时子程序 约0.1s 0.5us 这时为24MHz
D1: MOV R6,#100; 0.5us
D2: DJNZ R6,D2;100*100*1DJNZ R7,D1;100*1RET END
中断设计10进制计数器
设计一个10进制计数器0-9选择一个按键K01-K04任选产生外部中断信号/INT0或/INT1每按一次计数器加1并将计数值显示在一位数码管上 (按键接P3.2 P0数码管 ) 这里电平触发 ORG 0000H ;程序的初始位置 -------外部中断0LJMP MAIN ;跳到程序的起始位置ORG 0003H ;外部中断程序0入口LJMP INT ;跳到中断程序的起始位置 ORG 0100H
MAIN: CLR IT0 ;采用低电平触发SETB EX0 ;允许外部中断0中断SETB EA ;开启总中断MOV R3,#00H ;将R3置0MOV DPTR,#TABLE ;将表文件头的地址赋给基址
LOOP: MOV A,R3 ;将R3置给AMOVC A,ADPTR ;基址加变址查表内容赋给A MOV P0,A ;将A给P0口AJMP LOOP
DELAY: MOV R7,#25 ;延时程序
LOOP3: MOV R6,#50 ;
LOOP2: MOV R5,#50
LOOP1: DJNZ R5,LOOP1DJNZ R6,LOOP2DJNZ R7,LOOP3RET
INT: ACALL DELAY ;中断程序
LOOP4: JNB P3.2,LOOP4 ;去抖动INC R3 ;R3加一 CJNE R3,#10,RETURN ;若R3不为10则转移 相等则顺序执行置0 JNB直接寻址位为0则转移MOV R3,#0 ;将R3置0 JB 直接寻址位为1则转移
RETURN: RETI
TABLE: DB 028H,07EH,0A2H,62H,74H,61H,21H,7AH,20H,60HEND ;程序结束
实验七.定时器实验
定时器进行8个led灯轮流显示 ORG 0000H; 程序入口LJMP MAINORG 000BH; T0的中断入口LJMP ITOP; 转T0中断处理子程序IT0PORG 0080H
MAIN: MOV P0,#7FH ; 先亮第一盏灯 01111111MOV A,P0MOV SP,#60H ; 保护断点MOV B,#14H ; 一次定时50ms一共循环20次MOV TMOD,#01H ; 采用定时器T0方式1MOV TL0,#0B0H ; 给T0设初值15536 12Mhz 50msMOV TH0,#3CH ;SETB ET0;允许T0中断SETB EA;总中断允许SETB TR0;启动T0计数
HERE: SJMP HERE
ITOP: MOV TL0,#0B0H;进入T0中断服务子程序给T0重新装入初值MOV TH0,#3CH ;DJNZ B,RETURN;B为中断次数计数器B减1非0则中断返回CLR TR0 ;1s定时时间到停止T0工作MOV R3,#01H ;1s定时完成时就将R3值设为01H作为标志RR A ; A右移MOV P0,AMOV B,#14H ;定时50ms一共循环20次SETB TR0;重新启动T0计数
RETURN: RETIEND拓展部分时间间隔0.5~2秒可调时间步进为0.2秒采用按键K01 ~K04任选一个产生外部中断信号作为时间间隔选择输入中断服务程序调 整时间间隔。P1接led 按键接P3.2 -----外部中断0定时器T0 ORG 0000H
RESET: LJMP MAINORG 0003H;外部中断0入口LJMP INTORG 000BH; 定时器/计数器T0中断入口LJMP IT0PORG 0100H
MAIN: MOV SP,#60HMOV R4,#10 ;MOV R3,#10 ;MOV P1,#0FEH ; 11111110点亮一个ledMOV TMOD,#01H ;T0为方式1定时MOV TL0,#0B0H ; 10110000 初值15536MOV TH0,#3CH ; 00111100 CLR IT0 ;电平触发SETB EX0 ;允许外部中断0中断SETB ET0 ;允许T0中断SETB EA ;总中断允许SETB TR0 ; 启动T0计数SETB PX0 ;外部中断0优先级CLR PT0 ;定时器/计数器T0优先级 置0
HERE: SJMP HERE
IT0P: MOV TL0,#0B0H ;T0中断程序 初值15536 12Mhz 50msMOV TH0,#3CH ;一次50ms 共十次 即间隔0.5s可改移位ledDJNZ R4,RETURN ; R410减一不为0转移MOV B,R3 ; MOV R4,B ;R410MOV A,P1RL A ;循环左移MOV P1,A
RETURN: RETI
DELAY: MOV R7,#25 ;延时程序 12MHz 延时约0.1s
D1: MOV R6,#200 ;DJNZ R6,$ ;200*25*2usDJNZ R7,D1 ;25*2usRET
INT: ACALL DELAY ;外部中断0程序 延时约0.1s
LOOP4: JNB P3.2,LOOP4 ; 为低电平跳出ACALL DELAY ;再延时约0.1s 共0.2s
LOOP5: JNB P3.2,LOOP5 ;去抖动INC R3 INC R3INC R3INC R3CJNE R3,#42,RETURN1 ; 42-1032 32/48 判断是否循环了八个led/*改为INC R3 CJNE R3,#18,RETURN1;*/MOV R3,#10
RETURN1: RETI
END方式28位自动重装 led轮流显示(P0接led) —方式2 定时器T0 ORG 0000H;程序入口LJMP MAINORG 000BH;T0的中断入口LJMP ITOP; 转T0中断处理子程序IT0PORG 0080H
MAIN: MOV P0,#7FH; 先亮第一盏灯MOV A,P0MOV SP,#60HMOV B,#50H ; 一次定时250μs一共循环50*80次 共1sMOV TMOD,#02H ; 采用定时器T0方式2MOV TL0,#06H ;初值为6 12MHz 下 250us 初值计算公式MOV TH0,#06H;SETB ET0; 允许T0中断SETB EA; 总中断允许SETB TR0;启动T0计数
HERE: SJMP HERE
ITOP: DJNZ B,RETURN;B为中断次数计数器B减1非0则中断返回循环80次MOV B,#50HINC R4CJNE R4,#32H,RETURN ;将R4与50比较 循环50次 RR A ; A右移MOV P0,AMOV B,#50H ;开始新一轮MOV R4,#00H ;(寄存器R4一开始为0否)
RETURN: RETIEND
P0.0输出频率为1KHz的矩形波信号方式1T1ms 500Us半周期 ORG 0000H ----定时器T0LJMP MAINORG 000BH ;T0的中断入口LJMP IT0PORG 0080H; 主程序入口
MAIN: MOV SP,#60HMOV TMOD,#01H ;设置T0在方式1定时MOV TH0,#0FEH; 设初始值65036 500us12MhzMOV TL0,#0CH SETB EA ;总中断允许SETB ET0;允许T0中断SETB TR0 ;启动T0
HERE: SJMP HERE
IT0P: MOV TL0,#0CH ;进入T0中断服务子程序给T0重新装入初始值MOV TH0,#0FEHCPL P0.0 ;反转RETI
END方式2P0.0输出频率为1KHz的矩形波信号 精确----定时器T0 ORG 0000HLJMP MAINORG 000BH;T0的中断入口LJMP IT0PORG 0080H
MAIN: MOV SP,#60HMOV B,#5 ;循环次数为5次MOV TMOD,#02H ;T0在方式2定时MOV TL0,#156 ;设初始值 100usMOV TH0,#156SETB EA ;打开中断开关SETB ET0 ;允许T0中断SETB TR0 ;启动T0SETB P0.0
HERE: SJMP HERE
IT0P: DJNZ B,RETURNMOV B,#5CPL P0.0
RETURN:RETIEND//低电平亮 //脉冲信号测量:被测信号频率范围为1~10KHz采用定时/计数器实时检测信号频率,测试结果可观察 P2位选 P0 段选信号发生器接p3.5 t1计数
#include reg52.h
int Show_Num[5] {0};
int counter 0;
char Led[10] {0X28,0X7E,0XA2,0X62,0X74,0X61,0X21,0X7A,0X20,0X60}; 0-9 共阳void Time_Start(void)
{ TMOD 0X51; // T0方式1 定时计数 T1方式1计数 定时1s时 20次50ms ET0 1; //打开T0中断ET1 1; 打开T1中断TH0 0X3C; 设置定时器/计数器0的初始值。65536-50000/25660TL0 0XAF; (65536-50000%256)176 TH1 TL1 0;设置定时器/计数器1的初始值TR0 1; 定时器0运行控制位TR1 1; 定时器1运行控制位}
void delayms(int a) ;延时程序
{ int z;for( a12; a 0; a--){ for( z 121; z0; z--)}}
void Show_Led_7(unsigned int k)//75693
{ //通过七段数码管显示频率该子函数经软件仿真无问题Show_Num[0] k % 10;Show_Num[1] (k % 100 )/10;Show_Num[2] (k % 1000 )/100;Show_Num[3] (k % 10000 )/1000;Show_Num[4] k / 10000;P2 0XFE; P0 Led[Show_Num[4]]; delayms(1); //高位 P2 0XFD; P0 Led[Show_Num[3]]; delayms(1); P2 0XFB; P0 Led[Show_Num[2]]; delayms(1);P2 0XF7; P0 Led[Show_Num[1]]; delayms(1);P2 0XEF; P0 Led[Show_Num[0]]; delayms(1);
}void main(void)
{ int F_TH 0,F_TL 0; 能否把以下F_TH直接换成TH1 F_TL换成TL1unsigned int Frequency ;Time_Start();EA 1; 开总中断while(1){ if(counter 20 ){TR1 0;TR0 0;F_TH TH1;F_TL TL1;counter 0;TH1 TL1 0;TR1 1;TR0 1;Frequency (int) (F_TH * 256 F_TL);}Show_Led_7(Frequency); }}
void Time_interrupt0() interrupt 1 //外部中断0程序
{//TR1 1;TH0 0X3C; 1s到了 再赋初值 TL0 0XAF;counter; 计满了65536一次
}
/*void Time_interrupt1() interrupt 3 ; 外部中断1程序 可删
{ //报错P1 0X10; P0 0XA1; //输出ERROR}*/汇编常用指令总结
XCH 交换 XCHD交换低半字节
SWAP 累加器高低半字节交换
SUBB (带借位)减
INC 加一 DEC 减一
MUL AB 结果为BAB高A低
DIV AB A商B余
DA A 十进制调整
ANL 与
ORL 或
XRL 异或
CLR 清0
CPL 求反
RL 循环左移 RR循环右移
JZ 为0转移 JNZ 非0转移
CJNE 比较不相等转移
DJNZ 减一不为0转移汇编常用模块代码总结
延时1s
DElay: MOV R7,#10 ;延时子程序约 0.996s 1us
DEL1: MOV R6,#200 ;1us
DEL2: MOV R5,#248 ;1usDJNZ R5,$ ;248*200*10*2usDJNZ R6,DEL2 ;200*10*2usDJNZ R7,DEL1 ;10*2usRET 查表
MOV DPTR,#TABLE
MOVC A,ADPTR
MOVC AADPTR 或MOVC AAPC数码管显示表
DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H; 0-9