📄 main.lis
字号:
.module main.c
.area text
; Kb -> 0,X
0000 _main::
0000 A7FF ais #-1
0002 95 tsx
0003 ; /*-----------------------------------------------------*
0003 ; *工 程 名:
0003 ; *硬件连接:
0003 ; *程序描述: SD-HC08 模板生成
0003 ; */
0003 ; /*[头文件]*/
0003 ; #include "GP32C.h" //映像寄存器地址头文件
0003 ; #include "DJC.H"
0003 ; void Delay_ms(unsigned char i);
0003 ; void PWMInit(unsigned int Period); //PWM初始化
0003 ; void PWMconf(unsigned int Period); //PWM设置
0003 ; /*[主函数]*/
0003 ;
0003 ; void main(){
0003 ; unsigned char Kb;
0003 ; DDRD=0xff;
0003 A6FF lda #-1
0005 B707 sta 0x7
0007 ; DDRB=0xff;
0007 A6FF lda #-1
0009 B705 sta 0x5
000B ; PTB=0x0f;
000B A60F lda #15
000D B701 sta 0x1
000F ; asm("CLI");
000F 9A CLI
0010 2024 bra L3
0012 L2:
0012 ; while(1){
0012 ; Kb=KB_Scan();
0012 CD0000 jsr _KB_Scan
0015 95 tsx
0016 B700 sta *__r1
0018 F7 sta ,X
0019 ; if(Kb==0xff)Kb=KB_ScanD();
0019 A1FF cmp #-1
001B 2607 bne L5
001D CD0000 jsr _KB_ScanD
0020 95 tsx
0021 B700 sta *__r1
0023 F7 sta ,X
0024 L5:
0024 ; PTB=~Kb;
0024 F6 lda ,X
0025 43 coma
0026 B701 sta 0x1
0028 ; PTD=0x0;
0028 3F03 clr 0x3
002A ; if(Kb==0xff){
002A F6 lda ,X
002B A1FF cmp #-1
002D 2607 bne L7
002F ; operate(Kb);
002F 87 psha
0030 CD0056 jsr _operate
0033 A701 ais #1
0035 95 tsx
0036 ; }
0036 L7:
0036 L3:
0036 20DA bra L2
0038 X0:
0038 L1:
0038 A701 ais #1
003A .dbline 0 ; func end
003A 81 rts
003B ; j -> 0,X
003B ; u -> 1,X
003B ; i -> 4,X
003B _Delay_ms::
003B A7FE ais #-2
003D 95 tsx
003E ; }
003E ; }
003E ;
003E ; void Delay_ms(unsigned char i) //延时ims
003E ; { unsigned char j;
003E ; unsigned char u;
003E ; for(j=0;j<i;j++)
003E 7F clr ,X
003F 200D bra L13
0041 L10:
0041 6F01 clr 1,X
0043 2002 bra L17
0045 L14:
0045 L15:
0045 6C01 inc 1,X
0047 L17:
0047 E601 lda 1,X
0049 A1FA cmp #-6
004B 23F8 bls L14
004D L11:
004D 7C inc ,X
004E L13:
004E F6 lda ,X
004F E104 cmp 4,X
0051 25EE blo L10
0053 L9:
0053 A702 ais #2
0055 .dbline 0 ; func end
0055 81 rts
.area lit
0000 _tone_feq::
0000 0106 .word 262
0002 0126 .word 294
0004 014A .word 330
0006 015D .word 349
0008 0188 .word 392
000A 01B8 .word 440
000C 01EE .word 494
000E 0000 .word 0
0010 0000 .word 0
0012 0000 .word 0
0014 020B .word 523
0016 022E .word 558
0018 0294 .word 660
001A 02BA .word 698
001C 0310 .word 784
001E 0370 .word 880
0020 03DC .word 988
0022 0000 .word 0
0024 0000 .word 0
0026 0000 .word 0
0028 0416 .word 1046
002A 0497 .word 1175
002C 0526 .word 1318
002E 0575 .word 1397
0030 0620 .word 1568
0032 06E0 .word 1760
0034 07B8 .word 1976
0036 0000 .word 0
.area text
; tone -> 0,X
; KB_valve -> 4,X
0056 _operate::
0056 A7FE ais #-2
0058 95 tsx
0059 ; for(u=0;u<=250;u++) ;
0059 ; }
0059 ;
0059 ; const unsigned int tone_feq[]= {
0059 ; 262,294,330,349,392,440,494,0,0,0,
0059 ; 523,558,660,698,784,880,988,0,0,0,
0059 ; 1046,1175,1318,1397,1568,1760,1976,0
0059 ; };
0059 ;
0059 ; void operate(unsigned char KB_valve){
0059 ; unsigned int tone;
0059 ; tone=tone_feq[KB_valve];
0059 3F00 clr *__r0
005B E604 lda 4,X
005D B700 sta *__r1
005F 3800 lsl *__r1
0061 3900 rol *__r0
0063 B600 lda *__r1
0065 AB00 add #<_tone_feq
0067 B700 sta *__r1
0069 B600 lda *__r0
006B A900 adc #>_tone_feq
006D B700 sta *__r0
006F 5500 ldhx *__r0
0071 E601 lda 1,x
0073 9EE702 sta 2,SP
0076 F6 lda ,x
0077 95 tsx
0078 F7 sta ,X
0079 ; PWMconf(tone);
0079 E601 lda 1,X
007B 87 psha
007C F6 lda ,X
007D 87 psha
007E CD0093 jsr _PWMconf
0081 A702 ais #2
0083 ; T1SC&=~(1<<TSTOPBit);
0083 1B20 bclr #5,0x20
0085 ; Delay_ms(20);
0085 A614 lda #20
0087 87 psha
0088 CD003B jsr _Delay_ms
008B A701 ais #1
008D 95 tsx
008E ; T1SC|=(1<<TSTOPBit);
008E 1A20 bset #5,0x20
0090 L18:
0090 A702 ais #2
0092 .dbline 0 ; func end
0092 81 rts
0093 ; Duty -> 0,X
0093 ; Period -> 4,X
0093 _PWMconf::
0093 A7FE ais #-2
0095 95 tsx
0096 ; }
0096 ;
0096 ; void PWMconf(unsigned int Period){
0096 ; unsigned int Duty;
0096 ; Duty=2457600/Period;
0096 3F00 clr *__r1
0098 3F00 clr *__r0
009A E605 lda 5,X
009C B700 sta *__r3
009E E604 lda 4,X
00A0 B700 sta *__r2
00A2 4F clra
00A3 87 psha
00A4 A680 lda #-128
00A6 87 psha
00A7 A625 lda #37
00A9 87 psha
00AA 4F clra
00AB 87 psha
00AC B600 lda *__r3
00AE 87 psha
00AF B600 lda *__r2
00B1 87 psha
00B2 B600 lda *__r1
00B4 87 psha
00B5 B600 lda *__r0
00B7 87 psha
00B8 CD0000 jsr __divmod32s
00BB A704 ais #4
00BD 86 pula
00BE 86 pula
00BF 86 pula
00C0 B700 sta *__r2
00C2 86 pula
00C3 B700 sta *__r1
00C5 B600 lda *__r2
00C7 F7 sta ,X
00C8 B600 lda *__r1
00CA E701 sta 1,X
00CC ; PWMInit(Duty);
00CC 87 psha
00CD F6 lda ,X
00CE 87 psha
00CF CD00EF jsr _PWMInit
00D2 A702 ais #2
00D4 95 tsx
00D5 ; Duty=Duty/2;
00D5 74 lsr ,X
00D6 6601 ror 1,X
00D8 ; T1SC|=(1<<5); //停止定时器1计数器计数
00D8 1A20 bset #5,0x20
00DA ; T1CH0H = (Duty>>8); //设置高字节
00DA F6 lda ,X
00DB B726 sta 0x26
00DD ; T1CH0L = Duty; //设置低字节
00DD E601 lda 1,X
00DF B727 sta 0x27
00E1 ; T1SC|=(1<<TSTOPBit); //允许定时器1计数器计数
00E1 1A20 bset #5,0x20
00E3 ; Delay_ms(10); //延时10ms
00E3 A60A lda #10
00E5 87 psha
00E6 CD003B jsr _Delay_ms
00E9 A701 ais #1
00EB 95 tsx
00EC L19:
00EC A702 ais #2
00EE .dbline 0 ; func end
00EE 81 rts
00EF ; Temp -> 0,X
00EF ; Period -> 4,X
00EF _PWMInit::
00EF A7FE ais #-2
00F1 95 tsx
00F2 ; }
00F2 ;
00F2 ; void PWMInit(unsigned int Period)
00F2 ; {
00F2 ; unsigned int Temp=Period;
00F2 E604 lda 4,X
00F4 F7 sta ,X
00F5 E605 lda 5,X
00F7 E701 sta 1,X
00F9 ; //不允许溢出中断,不启动计数,分频因子=1,置位TSTOP,TRST
00F9 ; T1SC =0b01100000;
00F9 A660 lda #96
00FB B720 sta 0x20
00FD ; //[设置PWM周期]
00FD ; T1MODH = (Temp>>8);
00FD F6 lda ,X
00FE B723 sta 0x23
0100 ; T1MODL = Period;
0100 E605 lda 5,X
0102 B724 sta 0x24
0104 ; //[初始化设置PWM脉宽为0]
0104 ; T1CH0H = 0x00;
0104 3F26 clr 0x26
0106 ; T1CH0L = 0x00;
0106 3F27 clr 0x27
0108 ; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
0108 ; T1SC0 = 0b00011110;
0108 A61E lda #30
010A B725 sta 0x25
010C L20:
010C A702 ais #2
010E .dbline 0 ; func end
010E 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -