📄 noname1.lst
字号:
页 1
07-06-08
00:19:45
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
OUTPUT BIT P1.0 ;定义输出端口;
KEY_F_UP BIT P0.2 ;频率上调按键;
KEY_F_DOWN BIT P0.3 ;频率下调按键;
KEY_DC_UP BIT P0.4 ;占空比上调按键;
KEY_DC_DOWN BIT P0.5 ;占空比下调按键;
TIMER0_H EQU 30H ;定时器0高8位;
TIMER0_L EQU 31H ;定时器0低8位;
TIMER1_H EQU 32H ;定时器1高8位;
TIMER1_L EQU 33H ;定时器1低8位;
PERCENT EQU 34H ;占空比设置变量;
F_H EQU 35H ;频率高8位;
F_L EQU 36H ;频率低8位;
TEMP_H EQU 37H ;临时变量,用于全局数字的传递;
TEMP_L EQU 38H
F_TEMP_H EQU 39H
F_TEMP_L EQU 40H
DC_TEMP_H EQU 41H
DC_TEMP_L EQU 42H
ORG 0000H
0000 2100 AJMP MAIN
ORG 00BH
000B 41A0 AJMP TIMER0 ;定时器0中断入口;
ORG 01BH
001B 41B3 AJMP TIMER1 ;定时器1中断入口;
ORG 0100H
0100 753432 MAIN: MOV PERCENT,#50 ;初始化占空比为50%;
0103 753500 MOV F_H, #00H ;初始频率设为250HZ;
0106 7536FA MOV F_L, #0FAH
0109 7530F0 MOV TIMER0_H,#0F0H ;设初值;
010C 753160 MOV TIMER0_L,#60H ;设初值;
010F 7532F8 MOV TIMER1_H,#0F8H ;设初值;
0112 753330 MOV TIMER1_L,#30H ;设初值;
0115 758911 MOV TMOD, #11H ;定时器0和定时器1都工作在方式1下(16位);
0118 85308C MOV TH0, TIMER0_H ;定时器0初始定时为2ms;
011B 85318A MOV TL0, TIMER0_L
011E 85328D MOV TH1, TIMER1_H ;定时器1初始定时4ms;
0121 85338B MOV TL1, TIMER1_L
0124 D2A9 SETB ET0 ;设置定时器0中断;
0126 D2AB SETB ET1 ;设置定时器1中断;
0128 D2AF SETB EA ;开启总中断;
012A D28C SETB TR0 ;开启定时器0;
012C D28E SETB TR1 ;开启定时器1;
C:\USERS\SONY\DESKTOP\许靓\NONAME1.ASM
页 2
07-06-08
00:19:45
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
012E 313B LOOP: ACALL KEYSCAN
0130 80FC SJMP LOOP
DELAY: ;延时子程序;
0132 7A14 MOV R2, #20
0134 7B14 LOOP1: MOV R3, #20
0136 DBFE DJNZ R3, $
0138 DAFA DJNZ R2, LOOP1
013A 22 RET
KEYSCAN: ;键盘扫描子函数;
013B 3132 ACALL DELAY ;延时去抖;
F_UP:
013D 208213 JB KEY_F_UP, F_DOWN ;判断KEY_F_UP键是否按下,没有按下则往下检查KEY_F_DOWN键;
0140 3082FD JNB KEY_F_UP, $ ;等待按键松开;
0143 AF35 MOV R7, F_H ;频率加10;
0145 AE36 MOV R6, F_L
0147 7D00 MOV R5, #00H
0149 7C0A MOV R4, #0AH
014B 5104 ACALL ADD_16
014D 8D35 MOV F_H, R5
014F 8C36 MOV F_L, R4
0151 2199 AJMP END_KEY_SCAN_F ;结束;
F_DOWN:
0153 208313 JB KEY_F_DOWN, DC_UP ;判断KEY_F_DOWN键是否按下,没有按下则往下检查KEY_DC_UP键;
0156 3083FD JNB KEY_F_DOWN, $ ;等待按键松开;
0159 AF35 MOV R7, F_H ;频率减10;
015B AE36 MOV R6, F_L
015D 7D00 MOV R5, #00H
015F 7C0A MOV R4, #0AH
0161 510C ACALL SUB_16
0163 8D35 MOV F_H, R5
0165 8C36 MOV F_L, R4
0167 2199 AJMP END_KEY_SCAN_F ;结束;
DC_UP:
0169 208417 JB KEY_DC_UP, DC_DOWN ;判断KEY_DC_UP键是否按下,没有按下则往下检查KEY_DC_DOWN键;
016C 3084FD JNB KEY_DC_UP, $ ;等待按键松开;
016F E534 MOV A, PERCENT
0171 2405 ADD A, #05H ;脉宽加5;
0173 C3 CLR C
0174 9464 SUBB A, #100 ;判断是不是大于100,大于则重置为1;
0176 4005 JC NEXT1
0178 753401 MOV PERCENT, #01
017B 219F AJMP END_KEY_SCAN_DC
017D 2464 NEXT1: ADD A, #100
017F F534 MOV PERCENT, A
0181 219F AJMP END_KEY_SCAN_DC ;结束;
DC_DOWN:
0183 20851D JB KEY_DC_DOWN, END_KEY_SCAN ;判断KEY_DC_DOWN键是否按下,没有按下则结束;
0186 3085FD JNB KEY_DC_DOWN, $ ;等待按键松开;
C:\USERS\SONY\DESKTOP\许靓\NONAME1.ASM
页 3
07-06-08
00:19:45
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0189 E534 MOV A, PERCENT
018B C3 CLR C
018C 9405 SUBB A, #05H ;脉宽,频率减5;
018E 5005 JNC NEXT2 ;判断是否小于0,小于则重置为99;
0190 753463 MOV PERCENT, #99
0193 219F AJMP END_KEY_SCAN_DC
0195 F534 NEXT2: MOV PERCENT, A
0197 219F AJMP END_KEY_SCAN_DC ;结束;
END_KEY_SCAN_F:
0199 31A4 ACALL CALCULATE_F ;改变频率后要重新计算定时器0的初值;
019B 31D3 ACALL CALCULATE_DC ;改变频率后也要重新计算定时器1的初值,以确保占空比不改变;
019D 8004 SJMP END_KEY_SCAN
END_KEY_SCAN_DC:
019F 31D3 ACALL CALCULATE_DC ;改变占空比后要重新计算定时器1的初值;
01A1 8000 SJMP END_KEY_SCAN
END_KEY_SCAN:
01A3 22 RET
;-------------------------------------------------------------------------------
;void calculate_F()
; {
;
; temp=ALL-F_osc/12.0/FREQ;
; TIMER0_H=(uint)temp/256;
; TIMER0_L=(uint)temp%256;
; }
;下面这段程序是这段程序的翻译汇编语言,Fosc=12M;
;函数功能:频率计算函数,当频率变化,计算出定时器0初值;
;--------------------------------------------------------------------------------
CALCULATE_F:
01A4 C0E0 PUSH ACC
01A6 C0D0 PUSH PSW
01A8 7D00 MOV R5, #00H
01AA 7A0F MOV R2, #0FH
01AC 7B42 MOV R3, #42H
01AE 7C40 MOV R4, #40H
01B0 AE35 MOV R6, F_H
01B2 AF36 MOV R7, F_L
01B4 5114 ACALL NDIV42
01B6 8B39 MOV F_TEMP_H, R3
01B8 8C40 MOV F_TEMP_L, R4
01BA 7FFF MOV R7, #0FFH
01BC 7EFF MOV R6, #0FFH
01BE AD39 MOV R5, F_TEMP_H
01C0 AC40 MOV R4, F_TEMP_L
01C2 510C ACALL SUB_16
01C4 8D37 MOV TEMP_H, R5
01C6 8C38 MOV TEMP_L, R4
C:\USERS\SONY\DESKTOP\许靓\NONAME1.ASM
页 4
07-06-08
00:19:45
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
01C8 853730 MOV TIMER0_H, TEMP_H
01CB 853831 MOV TIMER0_L, TEMP_L
01CE D0D0 POP PSW
01D0 D0E0 POP ACC
01D2 22 RET
;---------------------------------------------------------------------------------
; void calculate_W()
; {
; float TEMP;
; TEMP=(1-PERCENT/100.0)*ALL+temp*PERCENT/100.0;
; TIMER1_H=(uint)TEMP/256;
; TIMER1_L=(uint)TEMP%256;
; }
;下面这段程序是这段程序的翻译汇编语言,temp=F_TEMP_H*256+F_TEMP_L;
;函数功能:脉宽计算函数,脉宽变化时,计算出定时器1初值;
;----------------------------------------------------------------------------------
CALCULATE_DC:
01D3 C0E0 PUSH ACC
01D5 C0D0 PUSH PSW
01D7 C3 CLR C
01D8 7464 MOV A, #64H
01DA 9534 SUBB A, PERCENT
01DC 7B02 MOV R3, #02H
01DE 7C8F MOV R4, #8FH
01E0 FF MOV R7, A
01E1 515E ACALL NMUL21
01E3 8B41 MOV DC_TEMP_H,R3
01E5 8C42 MOV DC_TEMP_L,R4
01E7 AB37 MOV R3, TEMP_H
01E9 AC38 MOV R4, TEMP_L
01EB AF34 MOV R7, PERCENT
01ED 515E ACALL NMUL21 ;乘积在R2,R3,R4中;
01EF 7F64 MOV R7, #64H ;商在R3,R4中;
01F1 5172 ACALL NDIV31
01F3 AF41 MOV R7, DC_TEMP_H
01F5 AE42 MOV R6, DC_TEMP_L
01F7 EB MOV A, R3
01F8 FD MOV R5, A
01F9 5104 ACALL ADD_16
01FB 8D32 MOV TIMER1_H,R5
01FD 8C33 MOV TIMER1_L,R4
01FF D0D0 POP PSW
0201 D0E0 POP ACC
0203 22 RET
ADD_16: ;16位加法子程序(R7R6+R5R4=R5R4);
0204 C3 CLR C
C:\USERS\SONY\DESKTOP\许靓\NONAME1.ASM
页 5
07-06-08
00:19:45
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0205 EE MOV A, R6
0206 3C ADDC A, R4
0207 FC MOV R4, A
0208 EF MOV A, R7
0209 3D ADDC A, R5
020A FD MOV R5, A
020B 22 END_ADD:RET
SUB_16: ;16位减法子程序(R7R6-R5R4=R5R4);
020C C3 CLR C
020D EE MOV A, R6
020E 9C SUBB A, R4
020F FC MOV R4, A
0210 EF MOV A, R7
0211 9D SUBB A, R5
0212 FD MOV R5, A
0213 22 END_SUB:RET
;-------------------------------------------------------------------------------------
;双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7
;入口: R5,R2,R3,R4,R6,R7
;占用资源: ACC,B,F0
;堆栈需求: 4字节
;出口: (R2),R3,R4,R6,R7,OV
;-------------------------------------------------------------------------------------
0214 E9 NDIV42 :MOV A,R1
0215 C0E0 PUSH ACC
0217 75F000 MOV B,#00H
021A EA NDV421 :MOV A,R2
021B C3 CLR C
021C 9F SUBB A,R7
021D F9 MOV R1,A
021E ED MOV A,R5
021F 9E SUBB A,R6
0220 4007 JC NDV422
0222 FD MOV R5,A
0223 E9 MOV A,R1
0224 FA MOV R2,A
0225 05F0 INC B
0227 80F1 SJMP NDV421
0229 C0F0 NDV422 :PUSH B
022B 75F010 MOV B,#10H
022E C3 NDV423 :CLR C
022F EC MOV A,R4
0230 33 RLC A
0231 FC MOV R4,A
C:\USERS\SONY\DESKTOP\许靓\NONAME1.ASM
页 6
07-06-08
00:19:45
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0232 EB MOV A,R3
0233 33 RLC A
0234 FB MOV R3,A
0235 EA MOV A,R2
0236 33 RLC A
0237 FA MOV R2,A
0238 CD XCH A,R5
0239 33 RLC A
023A CD XCH A,R5
023B 92D5 MOV F0,C
023D C3 CLR C
023E 9F SUBB A,R7
023F F9 MOV R1,A
0240 ED MOV A,R5
0241 9E SUBB A,R6
0242 20D502 JB F0,NCV424
0245 4004 JC NDV425
0247 FD NCV424 :MOV R5,A
0248 E9 MOV A,R1
0249 FA MOV R2,A
024A 0C INC R4
024B D5F0E0 NDV425 :DJNZ B,NDV423
024E D0E0 POP ACC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -