发送的子程序:
MOV TMOD,#20H
MOV SCON,#11010000B
ANL PCON,#01111111B
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
ALOOP1: INC R7
MOV A,R7
MOV 35H,A
MOV SBUF,#0E1H
JNB TI,$
CLR TI
JNB RI,$
CLR RI
MOV A,SBUF
XRL A,#0E2H
JNZ ALOOP1
ALOOP2: MOV R0,#30H
MOV R7,#06H
MOV R6,#00H
ALOOP3:MOV SBUF,@R0
MOV A,R6
ADD A,@R0
MOV R6,A
INC R0
JNB TI,$
CLR TI
DJNZ R7,ALOOP3
MOV SBUF,R6
JNB TI,$
CLR TI
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#00H,ALOOP2
CLR TI
CLR RI
RET
接收子程序:
MOV TMOD,#20H
MOV SCON,#11010000B
ANL PCON,#01111111B
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
BLOOP1:
JNB RI,$
CLR RI
MOV A,SBUF
XRL A,#0E1H
JNZ BLOOP1
MOV SBUF,#0E2H
JNB TI,$
CLR TI
RETT: MOV R0,#30H
MOV R7,#06H
MOV R6,#00H
BLOOP2:JNB RI,$
CLR RI
MOV A,SBUF
MOV @R0,A
INC R0
ADD A,R6
MOV R6,A
DJNZ R7,BLOOP2
JNB RI,$
CLR RI
MOV A,SBUF
XRL A,R6
JZ END1
MOV SBUF,#0FFH
JNB TI,$
CLR TI
AJMP RETT
END1:MOV SBUF,#00H
JNB TI,$
CLR TI
CLR RI
AJMP BLOOP1
中断显示,数码管显示:
;针对实验板的键盘扫描,显示程序
;使用中断T0进行键盘的扫描和T1进行显示
;显示缓冲区设在30H到35H里
;***********************初始化程序*********************
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP IT00
ORG 0030H
MAIN: MOV R0,#7FH
LOOP: MOV @R0,#00H
DJNZ R0,LOOP
MOV SP,#70H
MOV 37H,#30H ;把30H的一个缓冲区第一位保存,以后作为指针来用
MOV 09H,#30H ;把30H放到第一组工作寄存器R1中
MOV 08H,#30H ;把30H放到第一组工作寄存器R0中
MOV 0CH,#20H
CLR 00H
CLR 01H
CLR 02H ;初始化位地址00H,01H,02H
MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#018H
SETB TR0
SETB ET0
SETB EA ;启动定时
HEAR:
AJMP HEAR
;*******************************中断T0键盘+显示**********************
IT00:
CLR EA
PUSH ACC
PUSH B
PUSH PSW
PUSH DPH
PUSH DPL
SETB RS0
CLR RS1
MOV DPTR,#1FFFH
MOV A,#00H
MOVX @DPTR,A
JB P1.7,PASS0
JB 00H,CP
SETB 00H
AJMP PASS
CP:JB 01H,PASS
SETB 01H
AJMP KEYSELECT
;*********************判断健盘的具体位置********************
KEYSELECT:
MOV A,#0FEH
MOVX @DPTR,A
JNB P1.7,KEYS5
RL A
MOVX @DPTR,A
JNB P1.7,KEYS4
RL A
MOVX @DPTR,A
JNB P1.7,KEYS3
RL A
MOVX @DPTR,A
JNB P1.7,KEYS2
RL A
MOVX @DPTR,A
JNB P1.7,KEYS9
RL A
MOVX @DPTR,A
JNB P1.7,KEYS8
RL A
MOVX @DPTR,A
JNB P1.7,KEYS7
RL A
MOVX @DPTR,A
JNB P1.7,KEYS6
;******************************键盘功能模块**************************
KEYS4:
AJMP PASS
KEYS6:JB 02H,PASS
MOV A,@R0
MOV R5,A
INC R5
MOV A,R5
MOV @R0,A
CJNE R5,#0AH,PASS
MOV @R0,#00H
AJMP PASS
KEYS7:JB 02H,PASS
MOV A,@R0
MOV R5,A
DEC R5
MOV A,R5
MOV @R0,A
CJNE R5,#0FFH,PASS
MOV @R0,#09H
AJMP PASS
KEYS8:JB 02H,PASS
MOV R0,37H
INC R0
MOV 37H,R0
CJNE R0,#36H,PASS
MOV 37H,#30H
MOV R0,37H
AJMP PASS
KEYS2:
AJMP PASS
KEYS5:
CPL 02H
AJMP PASS
KEYS3:AJMP PASS
KEYS9:AJMP PASS
;************************键盘功能结束******************************
PASS0:
CLR 00H
CLR 01H
PASS:
;****************************中断T1显示***************************
MOV A,@R1
mov dptr, #tab
MOVC A,@A+DPTR
MOV R2,A
JB 02H,RE
;*********************闪烁程序**********************
MOV A,R0
CLR C
SUBB A,R1
JNZ RE
INC R3
MOV A,R3
SUBB A,#4FH
JNC RE
MOV A,#0FFH
MOV DPTR, #9FFFH
MOVX @DPTR,A
AJMP RE1
RE:
MOV dptr,#09FFFH
MOV A,R2
MOVX @DPTR,A
RE1: MOV A,R4
MOV DPTR,#7FFFH
MOVX @DPTR,A
INC R1
MOV A,R4
JB ACC.0,FORMAT
RR A
MOV R4,A
AJMP EXIT
FORMAT: MOV R1,#30H
MOV R4,#20H
EXIT: MOV TH0,#0FCH
MOV TL0,#018H
POP DPL
POP DPH
POP PSW
POP B
POP ACC
SETB EA
RETI
TAB: DB 0c0H, 0f9H, 0a4H, 0b0H, 99H, 92H
; 0 1 2 3 4 5
; 00H 01H 02H 03H 04H 05H
;
DB 82H, 0f8H, 80H, 90H 0FFH
; 6 7 8 9
关键字:单片机 串行通讯 键盘扫描 数码管显示
引用地址:
单片机与单片机串行通讯+键盘扫描+数码管显示
推荐阅读最新更新时间:2024-03-16 14:47
51单片机程序设计中的地址指针及其应用
CS-51单片机外部RAM的地址空间为64K,地址总线为16位,访问外接RAM可执行如下4条指令: MOVX A,@DPTR MOVX @DPTR,A MOVX A,@RI MOVX @RI,A 其中DPTR为16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作为地址指针时仅存低8位地址。 MCS-51执行上述指令时分为两个阶段:首先,是从外接程序存储器中取出指令代码,并进行分析。然后,执行对外接RAM的数据读/写操作。在这两个阶段,P0口、P1口上的地址选通是有区别的。 执行“MOVX A,@DPTR”和“MOVX @DPTR,A”指令时,在读指令代码阶段,由程序计数器(PC)提供A0
[单片机]
如何优化C语言(单片机) ?
1、选择合适的算法和数据结构 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。 数组与指针语句具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。但是在Keil中则相反,使用数组比使用的指针生成的代码更短。 2、使用尽量小的数据类型 能够使用
[单片机]
单片机学习的过程
单片机学习的过程应该是一个循序渐进、不断学习、不断积累的过程,可以分为三个阶段。 第一阶段:掌握开发单片机的必备基础知识。首先是熟练掌握单片机的基本原理,其实各家各门的单片机其基本结构和原理都差不多,特别是共有的知识需要好好理解和掌握。例如,内核结构、内存分配、中断处理、定时计数、串行通信、端口复用等一些最基本的概念和原理。除此之外,我们还需要具备模拟电子、数字电子、C语言程序开发知识以及原理图和PCB设计等一些技能。在进行系统开发的时候,进行原理设计、PCB布板、程序编写、系统联调这些工作都是在所难免的。 第二阶段:在掌握好一款单片机原理和应用的基础上,开始学习其他各家单片机的独有技术,学不了那么多也要多了解了解。同时尽可
[单片机]
STC12C5A60S2单片机产生SPWM主程序C代码
本程序通过模拟仿真,实际示波器测试,均表现良好,愿拿出来分享,若有更好的实现方法,希望高手多多指教。。。。 /*************spwm产生程序******/ /*单片机STC12C5A60S2,晶振11.0592M,正弦波50Hz,spwm波形21.6KHz*/ #include STC12x5A60S2.H #define uchar unsigned char #define uint unsigned int uchar code pwm ={255,240,226,211,196,182,168,154,141,128,115,103,91 ,80,69,59,50,42,34,27,20,15,10,6,3,1
[单片机]
单片机系统中的多任务多线程机制的实现
摘要:单片机系统的开发多情况下不是在嵌入式操作系统平台上进行的,而是直接基于处理器编写。在多任务并行执行的要求下,可以借鉴操作系统中的任务和线程机制,对资源和处理器合理进行调度。本文以实例对此进行讨论。
关键词:单片机 任务 线程 并行处理
引言
首先要指出的是一点是,我们不是讨论嵌入式实时多任务操作系统(RTOS)的设计。我们讨论的是,在不使用RTOS的控制系统中,如何体现多任务多线程机制的程序设计思想。
一些嵌入式设备可以需要操作系统,例如掌上电脑、PDA、网络控制器等高性能的手持设备和移动设备。它们往往和无线通信、互联网访问和多媒体处理等复杂而强大的功能联系在一起;对CPU要求也很高,往往是以通用CPU为原型的各种高
[应用]
瑞萨电子现已将“Renesas Ready合作伙伴网络”覆盖全部MCU和MPU产品线
瑞萨电子现已将“Renesas Ready合作伙伴网络”覆盖全部MCU和MPU产品线 在增加了对RZ MPU的支持之后,该计划现可提供来自200多个受信合作伙伴的软件组件,涵盖广泛的技术领域 2022 年 11 月 8 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子 今日宣布, 为其RZ产品家族微处理器(MPU)提供商业级、性能优化的组件——其中包括106个新合作伙伴和160个组件解决方案,进一步扩大“Renesas Ready合作伙伴网络”。 在过去三年中,这一受信技术合作伙伴计划已发展至超过200个合作伙伴的规模,共同打造了300多款与瑞萨RZ MPU,以及RA、RX和RL78微控制器(MCU)产品线相配套的即用
[嵌入式]
51单片机定时器使用时非常重要的6点经验详细的总结
单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。 理解是最好的记忆方法。好的教材一定会给出所有英文缩写的原形。 2. 尽量用形像的方法记忆。 比如TCON和TMOD两个寄存器各位上的功能,教程一般有个图表,你就在学习中不断回忆那个图表的形像。 3. TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER) 定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。其格式为:其中低四位定义定时器/计数器C/T0,高四位定义定时器/
[单片机]
双核单片机红外遥控码代码
一个用应广双核单片机做的红外遮挡开光(反射式)全部代码。 IR_SW equ pb.1 IR_INPUT equ pa.0 IR_OUTPUT equ pa.6 byte ir_new byte ir_old byte ir_enable byte i byte ir_new1 byte ir_new2 byte ir_new3 goto main0 goto main1 //----------------FPPA0------------------- main0: .ADJUST_OTP_IHRCR 8MIPS // IHRC/2 = 8MIPS, WatchDog Disable, RAM 0,1 temporary b
[单片机]