义隆单片机EM78P153使用 - 图文(8)

2019-08-30 18:31

EM78P153S使用总结 JBS PORT6,0 ;按键SB1按下了吗 JMP SB1_WORK ;有按键,跳转到SB1的处理程序 JBS PORT6,1 ;按键SB2按下了吗 JMP C_NUM2 ;有按键,跳转到SB2加1处理程序 JMP SCAN_HL3

;****************恢复之前的状态函数********************** JBACK: ;JBS PORT6,2 ;判断按键3是否按下 ;JMP SB3_WORK ;如果按下就跳转到S3 INC NUM1 ;判断按键1的次数 DJZ NUM1 ;如果为0就在此执行 JMP LP1 ;如果大于0就跳转到按键1的函数中 MOV A,@0B11111111 ;推出前先将所有灯都熄灭 MOV PORT5,A MOV A,@0B11111111 MOV PORT6,A JMP LP2 ;如果为0则在按键2中执行

;*********SB4按键具体的功能实现********等价刹车检测,在S124中优先级最高*** ;****************SB4按键次数扫描********************** SB4_WORK: CALL S_NUM ;调用按键消抖函数 ENI ;开中断 JBC PORT6,3 ;按键SB1按下4吗 ;JMP Sb_Scan ;无按键就跳回主函数继续检测 JMP JBACK ;此处是避免无效按键导致无法恢复到之前状态 BC TCC_FLAG,0 ;清零

MOV A,@0B00000000 ;点亮LED1-4 MOV PORT5,A

MOV A,@0B10001111 ;点亮LED5-6-78,HL123保持熄灭 MOV PORT6,A HL_SB4: ENI ; 开中断 MOV A,@40 ;1s MOV T_NUM,A JBS TCC_FLAG,0 JMP $+3 CALL SB12 ;调用HL123显示函数 BC TCC_FLAG,0 ;清零 JBS PORT6,1 JMP C_NUM4 JBC PORT6,3 JMP JBACK ;此处按键松开 JMP HL_SB4 ;循环 C_NUM4: CALL S_NUM ;调用按键消抖函数 JBC PORT6,1 ;按键SB2按下了吗 JMP HL_SB4 ;此处是避免无效按键导致无法恢复到之前状态 JBS PORT6,1 JMP $-1 ;此处是等待按键松开 INC NUM2 ;有按键,就次数加1 JBS NUM2,2 ;判断按键2的次数是否为4 JMP $+3 CLR NUM2 ;如果是则清零

34

EM78P153S使用总结 INC NUM2 ;置1 JMP HL_SB4

;****************SB1按键次数扫描********************** SB1_WORK: CALL S_NUM ;调用按键消抖函数 JBC PORT6,0 ;按键SB1按下了吗 ;JMP Sb_Scan ;无按键就跳回主函数继续检测 JMP LP1 ;此处是避免无效按键导致无法恢复到之前状态 JBS PORT6,0 JMP $-1 ;此处是等待按键松开 BC COUNT2,0 ;此变量的第一位置0,表示处于按键1的状态下 JBC SB3_FLAG,0 ;此处是判断是否需要进行光敏检测,为0表示要进行

JMP $+9 BS SB3_FLAG,0 ;光敏标志位置一 JBC PORT6,2 ;判断是否有光 JMP $+4 ;有光则正常显示即第八次全部都熄灭 CALL S_NUM ;调用按键消抖函数 JBS PORT6,2 ;按键SB3按下3吗 JMP SB3_WORK ;检测到无光,就执行光敏操作 MOV A,@7 ;检测到有光,则不操作,即第八次状态 MOV NUM1,A INC NUM1 ;有按键,跳转到SB1的处理程序 LP1: MOV A,NUM1 ;保存NUM1的值 MOV NUM,A JBS NUM2,2 ;判断按键2的次数是否为4

;*******此处如果清零则按键2会有一个初始态,如果置1则没有初始态********* JMP $+3 CLR NUM2 ;如果是则清零 INC NUM2 ;置1 MOV A,NUM2 MOV NUM3,A ;实现S1/2微观上面是同步,宏观上却是独立的效果 CLR HL_FLAG ;S2高低标志位清零 INC NUM1 ;判断按键1的次数 DJZ NUM1 ;如果为0就跳出进行循序检测 JMP $+2 ;如果大于0就在此执行 JMP Sb_Scan DJZ NUM1 ;是第1次按下吗 JMP $+2 ;不是跳转到下一条 JMP FUN_A1 ;是的,则跳转到处理程序 DJZ NUM1 ;是第2次按下吗 JMP $+2 JMP FUN_A2 DJZ NUM1 ;是第3次按下吗 JMP $+2 ;不是跳转到下一条 JMP FUN_A3 ;是的,则跳转到处理程序 DJZ NUM1 ;是第4次按下吗 JMP $+2 ;不是跳转到下一条

35

EM78P153S使用总结 JMP FUN_A4 ;是的,则跳转到处理程序 DJZ NUM1 ;是第4次按5吗 JMP $+2 ;不是跳转到下一条 JMP FUN_A5 ;是的,则跳转到处理程序 DJZ NUM1 ;是第6次按下吗 JMP $+2 ;不是跳转到下一条 JMP FUN_A6 ;是的,则跳转到处理程序 DJZ NUM1 ;是第7次按下吗 JMP $+2 ;不是跳转到下一条 JMP FUN_A7 ;是的,则跳转到处理程序 DJZ NUM1 ;是第8次按下吗 JMP $+2 ;不是跳转到下一条 JMP FUN_A8 ;是的,则跳转到处理程序

;******************************TCC服务函数************************************** ;进入一次中断函数,表示已经定时了25ms,所以可以通过设定次数来达到延时更长的目的,此处如果设置次数为39,则表示为1s,次数为19则表示为500ms

TCC_INT:

MOV A_buffer,A ;保存 A MOV A,R3

MOV R3_buffer,A ;保存 R3 MOV A,R4

MOV R4_buffer,A ;保存 R4

JBS IOCF,0 ;是否为TCC 中断 JMP INT_RET MOV A,ISR

AND A,@0XFE

MOV ISR,A ;清除TCC 溢出中断标志

MOV A,@158 ;是, 计时器赋初值 MOV TCC,A

INC COUNTER MOV A,COUNTER SUB A,T_NUM ;多少个25MS JBS STATUS,0 ;定时到没? JMP $+2 JMP INT_RET

CLR COUNTER ;到, 清计数器 INC TCC_FLAG ;定时完成标志位 INT_RET:

MOV A,R4_buffer ; 返回 R4 MOV R4,A

MOV A,R3_buffer ; 返回 R3 MOV R3,A

SWAP A_buffer ; 返回 A SWAPA A_buffer RETI

;****************按键消抖函数********************** S_NUM: CLR ISR ; 清除中断标志 ENI ; 开中断 BC TCC_FLAG,0 ;清零

36

EM78P153S使用总结 MOV A,@0 ;25MS MOV T_NUM,A JBS TCC_FLAG,0 ;25MS的延时 JMP $-1 ;调用延时函数实现消抖功能 BC TCC_FLAG,0 ;清零 DISI ;中断失能 RET

;****************初始化函数********************** INIT:

m153ClrRamBank ;清所有RAM的宏调用 ;****************IO端口初始化*********

MOV A,@0B00000000 ;定义PORT5为输出口 IOW IOC5

MOV A,@0B00001111 ;初始化PORT5输出\ MOV PORT5,A MOV A,@0B00001111 ;定义PORT6高四位为输出脚,第四位为按键检测输入口

IOW IOC6

MOV A,@0B11111111 ;初始化PORT6输出\ MOV PORT6,A

MOV A,@0B11111000 ;输入端内部上拉 IOW IOCD

;****************TCC初始化*********

CLR COUNTER ; 清除COUNTER 值 MOV A,@0B00000111

CONTW ;定时器,选用内部指令时钟周期作为 TCC 信号源,TCC预分频比为1:256 MOV A,@158

MOV TCC,A ;TCC计数频率为(256-158) ;TCC overflow time = (1/4MHz)*(256-158)*256*2=25ms ;此处测试结果 COUNTER为0表示25ms,1表示50ms CLR ISR ; 清除中断标志 MOV A,@0B00000001

IOW IMR ; 使能TCC 中断功能 RET

;*************************************************************************** END

对于花样灯程序的说明:

(1)在程序运行的过程中,通过查询的方式来检测按键是否按下,如果有则进入按键处理程序,否则循环检测。

(2)程序中是通过TCC定时器实现的延时。

(3)程序中将按键SB1与SB3的处理程序交叉在一起,这样宏观上面两者控制的灯的工作模式是独立的,而不会相互影响。

(4)程序中的按键SB2表示的是功能需求中的SB3,而SB3则代表功能需求中的SB2。这个变化不会对硬件电路产生影响。 4.2.3 硬件设计

原理图说明:

37

EM78P153S使用总结 (1)按键检测端口P63为只能够做为输入脚使用,且不能够设置为内部上拉,所以要外加上拉电阻。

(2)使用0欧姆电阻及短接线可以让PCB板连线变得简单。 (3)采用上电复位的模式,省掉了复位电路。 原理图如图4.1所示。

图4.1 花样灯原理图

4.2.4 元器件明细表

元器件明细表如表4.2所示。

表4.2 花样灯元器件明细表

序号 1 2 3 4 5 6 7 8 9 10 11 12 13 代号 C1 HL1~3 LED1~8 R1~12 R13~20 R21 R22、R23、R25、R27 R24、R26 SB1~3 U1 V1~8 V9 XP1 名称或规格 钽电容 激光指示灯 发光二极管 贴片电阻 贴片电阻 贴片电阻 贴片电阻 贴片电阻 按键 义隆单片机 三极管 光敏三极管 电源插座 型号 47uF/16V 510Ω 1kΩ 10k 0Ω 0Ω PH2.54mm EM78P153S 9012 EKPSMD3528 PH2.54mm 封装 3528 0603 0603 0603 0603 1206 DIP2 SOP14 SOT23 3528 DIP2 数量 1 3 8 12 8 1 4 2 3 1 8 1 1 备注

38


义隆单片机EM78P153使用 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国共产党在新民主主义革命时期土地政策

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: