- UID
- 133947
- 性别
- 男
|
这方面的文章网上多的很,在这给你提供个例子,仅供参考...
SecCoun EQU 59H
SpCoun EQU 57H ;速度计时器单元57H和58H,高位在前(57H单元中)
Count EQU 56H ;显示时的计数器
SpCalc bit 00h ;要求计算速度的标志
Hidden EQU 16 ;消隐码
ORG 0000H
AJMP START
ORG 1BH
JMP TIMER1 ;定时中断1入口
ORG 30H
START: MOV SP,#5FH ;设置堆栈
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所有显示器、LED灭
MOV TMOD,#00010101B ;定时器T1工作于方式1,定时器0工作方式1 MOV TH1,#HIGH(65536-4000)
MOV TL1,#LOW(65536-4000)
SETB TR1
SETB ET1 ;开定时器1中断
SETB EA
LOOP: JNB SpCalc,LOOP ;如果未要求计算,转本身循环
;标号: MULD 功能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MOV R2,SpCoun
MOV R3,SpCoun+1
MOV R6,#0
MOV R7,#5 ;测得的数值是每秒计数值,转为每分转速(每一转测12次,故乘5而非60)
CALL MULD
;标号: HB2 功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A ;将乘得的结果送R6R准备转换,这里结果不可能超过2字节
CALL HB2
CBCD:
MOV DISPBUF,R3 ;最高位
MOV A,R4 ;
ANL A,#0F0H ;去掉低4位
SWAP A ;将高4位切换到低4位
MOV DISPBUF+1,A
MOV A,R4
ANL A,#0FH
MOV DISPBUF+2,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV DISPBUF+3,A
MOV A,R5
ANL A,#0FH
MOV DISPBUF+4,A
CLR SpCalc ;清计算标志
JMP LOOP
;主程序到此结束
TIMER1: PUSH ACC;ACC入栈
PUSH PSW SW入栈
SETB RS0 ;工作区1
JNB TR0,SETTR0 ;如果T0未运行,则开启T0
JMP GO1
SETTR0:
SETB TR0
GO1:
INC SecCoun ;秒计数器加1
MOV A,SecCoun
CJNE A,#251,Go2 ;如果未到1s则转
CLR TR0 ;1s到了,则停止T0的运行
MOV SpCoun,TH0
MOV SpCoun+1,TL0 ;读取计数值
CLR A
MOV TH0,A
MOV TL0,A ;清计数器
SETB SpCalc ;要求主程序计算速度
MOV SecCoun,#0 ;清秒计数器
Go2:
INC COUNT ;用于显示的计数器
MOV A,COUNT
CLR C
SUBB A,#6
JZ N1
JMP N2
N1: MOV COUNT,#0
N2: MOV A,#DISPBUF
ADD A,COUNT
MOV R0,A ;指向当前要显示的显示缓冲区
MOV A,@R0 ;取第一个待显示数
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形码
MOV P0,A ;将字形码送P0位(段口)
MOV A,COUNT
MOV DPTR,#BitTab ;字位表首地址
MOVC A,@A+DPTR
ORL P2,#11111100B
ANL P2,A
MOV TH1,#HIGH(65536-4000)
MOV TL1,#LOW(65536-4000)
POP PSW
POP ACC
RETI
BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTABB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
……其他数学运算程 |
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!) |
|