📄 delay.lis
字号:
.module Delay.c
.area text
; j -> 0,X
; u -> 1,X
; i -> 4,X
0000 _Delay_ms::
0000 A7FE ais #-2
0002 95 tsx
0003 ; /*[头文件]*/
0003 ; #include "GP32C.H" //包含头文件
0003 ; /*函数声明*/
0003 ; void PWMconf(unsigned int); //PWM设置
0003 ; void PWMInit(unsigned int Period);
0003 ;
0003 ; /*Delay_ms:毫秒级延时函数------------------------------*
0003 ; *功 能:延时函数 *
0003 ; *参 数:i=延时时间(ms) (i取值范围:1-255) *
0003 ; *返 回:无 *
0003 ; *-----------------------------------------------------*/
0003 ; void Delay_ms(unsigned char i)
0003 ; { unsigned char j;
0003 ; unsigned char u;
0003 ; for(j=0;j<i;j++)
0003 7F clr ,X
0004 200D bra L5
0006 L2:
0006 6F01 clr 1,X
0008 2002 bra L9
000A L6:
000A L7:
000A 6C01 inc 1,X
000C L9:
000C E601 lda 1,X
000E A1FA cmp #-6
0010 23F8 bls L6
0012 L3:
0012 7C inc ,X
0013 L5:
0013 F6 lda ,X
0014 E104 cmp 4,X
0016 25EE blo L2
0018 L1:
0018 A702 ais #2
001A .dbline 0 ; func end
001A 81 rts
001B ; Duty -> 2,X
001B ; Period -> 4,X
001B ; Hz -> 8,X
001B _PWMconf::
001B A7FA ais #-6
001D 95 tsx
001E ; for(u=0;u<=250;u++);
001E ; }
001E ;
001E ;
001E ; void PWMconf(unsigned int Hz)
001E ; {
001E ; unsigned int Period,Duty;
001E ; Period=2457600/64/Hz;
001E 3F00 clr *__r1
0020 3F00 clr *__r0
0022 E609 lda 9,X
0024 B700 sta *__r3
0026 E608 lda 8,X
0028 B700 sta *__r2
002A 4F clra
002B 87 psha
002C A696 lda #-106
002E 87 psha
002F 4F clra
0030 87 psha
0031 87 psha
0032 B600 lda *__r3
0034 87 psha
0035 B600 lda *__r2
0037 87 psha
0038 B600 lda *__r1
003A 87 psha
003B B600 lda *__r0
003D 87 psha
003E CD0000 jsr __divmod32s
0041 A704 ais #4
0043 86 pula
0044 86 pula
0045 86 pula
0046 B700 sta *__r2
0048 86 pula
0049 B700 sta *__r1
004B B600 lda *__r2
004D E704 sta 4,X
004F B600 lda *__r1
0051 E705 sta 5,X
0053 ; PWMInit(Period);
0053 87 psha
0054 E604 lda 4,X
0056 87 psha
0057 CD0165 jsr _PWMInit
005A A702 ais #2
005C 95 tsx
005D ; Duty=Period/1.2;
005D E605 lda 5,X
005F A401 and #1
0061 B700 sta *__r1
0063 4F clra
0064 B700 sta *__r0
0066 B600 lda *__r1
0068 87 psha
0069 B600 lda *__r0
006B 87 psha
006C 4F clra
006D 87 psha
006E 87 psha
006F 9E6D03 tst 3,SP
0072 2A06 bpl X0
0074 9E6302 com 2,SP
0077 9E6301 com 1,SP
007A X0:
007A CD0000 jsr __long_to_SPfloat
007D 86 pula
007E B700 sta *__r0
0080 86 pula
0081 B700 sta *__r1
0083 86 pula
0084 B700 sta *__r2
0086 86 pula
0087 B700 sta *__r3
0089 E605 lda 5,X
008B B700 sta *__r5
008D E604 lda 4,X
008F B700 sta *__r4
0091 3400 lsr *__r4
0093 3600 ror *__r5
0095 B600 lda *__r5
0097 87 psha
0098 B600 lda *__r4
009A 87 psha
009B 4F clra
009C 87 psha
009D 87 psha
009E 9E6D03 tst 3,SP
00A1 2A06 bpl X1
00A3 9E6302 com 2,SP
00A6 9E6301 com 1,SP
00A9 X1:
00A9 CD0000 jsr __long_to_SPfloat
00AC 4F clra
00AD 87 psha
00AE 87 psha
00AF 87 psha
00B0 A640 lda #64
00B2 87 psha
00B3 CD0000 jsr __SPFloat_mul
00B6 A704 ais #4
00B8 B600 lda *__r3
00BA 87 psha
00BB B600 lda *__r2
00BD 87 psha
00BE B600 lda *__r1
00C0 87 psha
00C1 B600 lda *__r0
00C3 87 psha
00C4 CD0000 jsr __SPFloat_add
00C7 A704 ais #4
00C9 A69A lda #-102
00CB 87 psha
00CC A699 lda #-103
00CE 87 psha
00CF 87 psha
00D0 A63F lda #63
00D2 87 psha
00D3 CD0000 jsr __SPFloat_div
00D6 A704 ais #4
00D8 86 pula
00D9 B700 sta *__r0
00DB 86 pula
00DC B700 sta *__r1
00DE 86 pula
00DF B700 sta *__r2
00E1 86 pula
00E2 B700 sta *__r3
00E4 87 psha
00E5 B600 lda *__r2
00E7 87 psha
00E8 B600 lda *__r1
00EA 87 psha
00EB B600 lda *__r0
00ED 87 psha
00EE 4F clra
00EF 87 psha
00F0 87 psha
00F1 87 psha
00F2 A647 lda #71
00F4 87 psha
00F5 CD0000 jsr __SPFloat_cmp_s
00F8 A708 ais #8
00FA 912C blt L12
00FC B600 lda *__r3
00FE 87 psha
00FF B600 lda *__r2
0101 87 psha
0102 B600 lda *__r1
0104 87 psha
0105 B600 lda *__r0
0107 87 psha
0108 4F clra
0109 87 psha
010A 87 psha
010B 87 psha
010C A647 lda #71
010E 87 psha
010F CD0000 jsr __SPFloat_sub
0112 A704 ais #4
0114 CD0000 jsr __SPFloat_to_long
0117 A702 ais #2
0119 86 pula
011A B700 sta *__r4
011C 86 pula
011D AB00 add #0
011F E701 sta 1,X
0121 B600 lda *__r4
0123 A980 adc #-128
0125 F7 sta ,X
0126 201E bra L13
0128 L12:
0128 B600 lda *__r3
012A 87 psha
012B B600 lda *__r2
012D 87 psha
012E B600 lda *__r1
0130 87 psha
0131 B600 lda *__r0
0133 87 psha
0134 CD0000 jsr __SPFloat_to_long
0137 A702 ais #2
0139 86 pula
013A B700 sta *__r0
013C 86 pula
013D B700 sta *__r1
013F B600 lda *__r0
0141 F7 sta ,X
0142 B600 lda *__r1
0144 E701 sta 1,X
0146 L13:
0146 F6 lda ,X
0147 E702 sta 2,X
0149 E601 lda 1,X
014B E703 sta 3,X
014D ; T1SC|=(1<<5); //停止定时器1计数器计数
014D 1A20 bset #5,0x20
014F ; //[设置PWM脉宽]
014F ; T1CH0H = (Duty>>8); //设置高字节
014F E602 lda 2,X
0151 B726 sta 0x26
0153 ; T1CH0L = Duty; //设置低字节
0153 E603 lda 3,X
0155 B727 sta 0x27
0157 ; T1SC&=~(1<<5); //允许定时器1计数器计数
0157 1B20 bclr #5,0x20
0159 ; Delay_ms(2000); //延时100ms
0159 A6D0 lda #-48
015B 87 psha
015C CD0000 jsr _Delay_ms
015F A701 ais #1
0161 95 tsx
0162 L10:
0162 A706 ais #6
0164 .dbline 0 ; func end
0164 81 rts
0165 ; Temp -> 0,X
0165 ; Period -> 4,X
0165 _PWMInit::
0165 A7FE ais #-2
0167 95 tsx
0168 ; }
0168 ;
0168 ;
0168 ; /*PWMconf:PWM初始化设置--------------------------------*
0168 ; * 功 能:PWM脉冲周期、占空比的设置 *
0168 ; * 参 数:rate=脉宽时钟数,cyc=脉冲周期时钟数 *
0168 ; * 返 回:无 *
0168 ; *-----------------------------------------------------*/
0168 ; void PWMInit(unsigned int Period)
0168 ; {
0168 ; unsigned int Temp=Period;
0168 E604 lda 4,X
016A F7 sta ,X
016B E605 lda 5,X
016D E701 sta 1,X
016F ; //不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST
016F ; T1SC = 0x36;
016F A636 lda #54
0171 B720 sta 0x20
0173 ; //[设置PWM周期]
0173 ; T1MODH = (Temp>>8);
0173 F6 lda ,X
0174 B723 sta 0x23
0176 ; T1MODL = Period;
0176 E605 lda 5,X
0178 B724 sta 0x24
017A ; //[初始化设置PWM脉宽为0]
017A ; T1CH0H = 0x00;
017A 3F26 clr 0x26
017C ; T1CH0L = 0x00;
017C 3F27 clr 0x27
017E ; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
017E ; T1SC0 = 0x1E;
017E A61E lda #30
0180 B725 sta 0x25
0182 ; //允许定时器1计数寄存器计数
0182 ; T1SC &= 0xDF;
0182 B620 lda 0x20
0184 A4DF and #-33
0186 B720 sta 0x20
0188 L14:
0188 A702 ais #2
018A .dbline 0 ; func end
018A 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -