⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 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 + -