嵌入式实训程序99秒倒计时
软硬件结合的嵌入式实训程序
;*********说明**************
;*输入PE6为 暂停/继续键 *
;*输入PE7为 时间设置键 *
;*输出PA0为数据线 *
;*输出PA1为时钟线 *
;*输出PA2为蜂鸣器 *
;***************************
PCONA EQU 0X01D20000
PDATA EQU 0X01D20004
PCONE EQU 0X01D20028
PDATE EQU 0X01D2002C
PUPE EQU 0X01D20030
AREA MININS,CODE,READONLY
ENTRY
CODE32
MAINBL INIT
BL WORDCOPY
LOOP3
LDR R0,=CURRENTVALUE
BL DISPLAY
BL DELAY
BL KEY
LDR R0,=VALUE ;获得value的地址
LDR R0,[R0] ;获得value的数据
;************ 调秒 ************************************************
TST R0,#0X80
BLEQ SET_TIME
;*********** 暂停/继续**************************************************
TST R0,#0X40 ;测试PE6暂停键是否为0
BLNE SUBMIN ;如果PE6是为1(没有按键)z=0则执行SUBMIN函数调用
;********** ***********************************************
LDR R2,=CURRENTVALUE
LDR R3,[R2]
CMP R3,#0X0 ;判断是否为零
BNE LOOP3 ;不为零时跳转至LOOP3
LDR R0,=CURRENTVALUE
BL DISPLAY ;显示零
DISP
LDR R1,=PDATA
LDR R2,[R1]
ORR R2,R2,#0X4;蜂鸣器响
STR R2,[R1]
LDR R0,=PCONE
LDR R1,=0X5555
STR R1,[R0] ;配置PE口为输出口
LDR R3,=0X5
LDR R0,=PDATE
LOOP4LDR R1,=0XF0
STR R1,[R0] ;让PE6.PE7 为高电平灯灭
;BL DELAY
LDR R1,=0X0F
STR R1,[R0] ;让灯亮
;BL DELAY
SUBS R3,R3,#0X1
BNE LOOP4 ;闪烁5次
B MAIN
;********************* 延时函数delay ********************************
DELAY
STMFD SP!,{R0,LR}
LDR R0,=0X1
LOOPSUBS R0,R0,#1
BNE LOOP
LDMFD SP!,{R0,PC}
;********************* SUBMIN函数 *********************************
SUBMIN
STMFD SP!,{R0,R1,LR}
LDR R0,=CURRENTVALUE
LDR R1,[R0];R0=CURRENTVALUE
SUBS R1,R1,#1;
AND R2,R1,#0XF;
CMP R2,#0XF;
SUBEQ R1,R1,#0X6;bcd码调整
STR R1,[R0];
LDMFD SP!,{R0,R1,PC}
;*********************** 初始化函数init ****************************
INIT
STMFD SP!,{R1,R2,LR}
LDR R1,=PCONA
LDR R2,=0X0
STR R2,[R1];配置PA为输出口
LDR R1,=PDATA
LDR R2,=0X0
STR R2,[R1];PA的数据口为零
LDR R1,=PCONE
LDR R2,=0X0
STR R2,[R1];配置PE口为输入口
LDR R1,=PUPE
LDR R2,=0X0
STR R2,[R1];配置PE口的上拉电阻
LDMFD SP!,{R1,R2,PC}
;************************* 显示函数display ************************
DISPLAY
STMFD SP!,{R1,R2,R3,R6,LR}
MOV R6,#0X10; 移位的计数器的初值
LDR R1,[R0];R1获得CURRENTVALUE的值
AND R0,R1,#0XF ;获得R1的个位数
AND R2,R1,#0XF0;获得R!的十位数
MOV R2,R2,LSR #4
LDRR1,=CO
DING
MOV R0,R0,LSL#2
LDRR0,[R1,R0];R0=R1+R0个位数的coding
MOV R2,R2,LSL#2
LDRR2,[R1,R2];R2=R1+R2十位数的coding
MOV R1,R2,LSL#8;把十位数的co
软硬件结合的嵌入式实训程序
ding放入R1的15~8位
ORRR1,R1,R0;把个位数的coding放入R1的7~0位
LDR R2,=PDATA
LOOP1 MOV R3,#0;
STR R3,[R2] ;将 PA1引脚clk拉为低电平
MOV R5,R1
BIC R5,R5,#0X6;将PA1。PA2清零
STR R5,[R2] ;将数据从PA0引脚输出
ORR R5,R5,#0X2
STR R5,[R2] ;将PA1引脚的clk拉为高
MOV R1,R1 ,LSR #1 ;将数据寄存器右移一位
SUBS R6,R6,#1 ;移位的计数器减一
BNE LOOP1
LDMFD SP!,{R1,R2,R3,R6,PC}
;********************* 获取按键信息key **************************
KEY
STMFD SP!,{R0,R1,R2,LR}
LDR R0,=PDATE
AND R1,R1,#0 ;清除R1寄存器的数据
LDR R1,[R0] ;把PE6,PE7的数据放到R1
LDR R2,=VALUE ;获的FLAG变量的地址
STR R1,[R2] ;存放key值
LDMFD SP!,{R0,R1,R2,PC}
;***************** 字复制函数wordcopy *****************************
WORDCOPY
STMFD SP!,{R0,R1,R2,LR}
LDR R0,=SOURCEVALUE
LDR R1,=CURRENTVALUE
LDR R2,[R0]
STR R2,[R1]
LDMFD SP!,{R0,R1,R2,PC}
;********************** 时间设置函数SET-TIME*************************
SET_TIME
STMFD SP!,{R1,LR}
LDR R0,=CURRENTVALUE
BL DISPLAY
LOOP5BL ADDSOURCE
BL DELAY
BL DISPLAY
BL KEY
LDR R1,=VALUE ;获得value的地址
LDR R1,[R1] ;获得value的数据
TST R1,#0X80
BEQ LOOP5
LDMFD SP!,{R0,PC}
;******************** ADDSOURCE函数 ****************************
ADDSOURCE
STMFD SP!,{R0,LR}
LDR R0,=SOURCEVALUE
LDR R2,[R0];R2等于COURCEVALUE
ADD R2,R2,#1;R2=R2+1
AND R3,R2,#0XF ;
CMP R3,#0XA;
ADDEQ R2,R2,#0X6 ;bcd码调整
CMP R2,#0XA0;
MOVEQ R2,#0X0;100变零
STR R2,[R0];
LDMFD SP!,{R0,PC}
;***************** *****************************
CURRENTVALUEDCD 0
SOURCEVALUE DCD 0x3
VALUE DCD 0xb0
CODING DCD 0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XE0,0XFE,0XF6
END
- 基于PLC控制的航空电镀生产线自动输送
- 中考预测课内外文言文对比阅读2
- 2018-2023年中国商业智能(BI)产业市场
- 中国金融体制改革研究2011new
- 外窗淋水试验方案
- 精益生产(Lean Production)
- 学校安全事故处置和信息报送制度
- Chapter 5 Human Resources Management
- 【小学数学】人教版小学六年级上册数学
- 初中数学解题方法与技巧
- 山东省创伤中心建设与管理指导原则(试
- 函数与数列的极限的强化练习题答案
- 10分钟淋巴按摩消脂
- 网络应急演练预案
- 服装设计入门基础知识
- 初二数学分式计算题练习
- (人教新课标)高二数学必修5第二章 数列
- 最新自主创业项目
- 北京大学 无机化学课件 4第4章 配合物
- 贸易公司业务管理制度




