?? delay.s
字號:
.module Delay.c
.area text
; j -> 0,X
; u -> 1,X
; i -> 4,X
_Delay_ms::
ais #-2
tsx
; /*[頭文件]*/
; #include "GP32C.H" //包含頭文件
; /*函數聲明*/
; void PWMconf(unsigned int); //PWM設置
; void PWMInit(unsigned int Period);
;
; /*Delay_ms:毫秒級延時函數------------------------------*
; *功 能:延時函數 *
; *參 數:i=延時時間(ms) (i取值范圍:1-255) *
; *返 回:無 *
; *-----------------------------------------------------*/
; void Delay_ms(unsigned char i)
; { unsigned char j;
; unsigned char u;
; for(j=0;j<i;j++)
clr ,X
bra L5
L2:
clr 1,X
bra L9
L6:
L7:
inc 1,X
L9:
lda 1,X
cmp #-6
bls L6
L3:
inc ,X
L5:
lda ,X
cmp 4,X
blo L2
L1:
ais #2
.dbline 0 ; func end
rts
; Duty -> 2,X
; Period -> 4,X
; Hz -> 8,X
_PWMconf::
ais #-6
tsx
; for(u=0;u<=250;u++);
; }
;
;
; void PWMconf(unsigned int Hz)
; {
; unsigned int Period,Duty;
; Period=2457600/64/Hz;
clr *__r1
clr *__r0
lda 9,X
sta *__r3
lda 8,X
sta *__r2
clra
psha
lda #-106
psha
clra
psha
psha
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
jsr __divmod32s
ais #4
pula
pula
pula
sta *__r2
pula
sta *__r1
lda *__r2
sta 4,X
lda *__r1
sta 5,X
; PWMInit(Period);
psha
lda 4,X
psha
jsr _PWMInit
ais #2
tsx
; Duty=Period/1.2;
lda 5,X
and #1
sta *__r1
clra
sta *__r0
lda *__r1
psha
lda *__r0
psha
clra
psha
psha
tst 3,SP
bpl X0
com 2,SP
com 1,SP
X0:
jsr __long_to_SPfloat
pula
sta *__r0
pula
sta *__r1
pula
sta *__r2
pula
sta *__r3
lda 5,X
sta *__r5
lda 4,X
sta *__r4
lsr *__r4
ror *__r5
lda *__r5
psha
lda *__r4
psha
clra
psha
psha
tst 3,SP
bpl X1
com 2,SP
com 1,SP
X1:
jsr __long_to_SPfloat
clra
psha
psha
psha
lda #64
psha
jsr __SPFloat_mul
ais #4
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
jsr __SPFloat_add
ais #4
lda #-102
psha
lda #-103
psha
psha
lda #63
psha
jsr __SPFloat_div
ais #4
pula
sta *__r0
pula
sta *__r1
pula
sta *__r2
pula
sta *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
clra
psha
psha
psha
lda #71
psha
jsr __SPFloat_cmp_s
ais #8
blt L12
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
clra
psha
psha
psha
lda #71
psha
jsr __SPFloat_sub
ais #4
jsr __SPFloat_to_long
ais #2
pula
sta *__r4
pula
add #0
sta 1,X
lda *__r4
adc #-128
sta ,X
bra L13
L12:
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
jsr __SPFloat_to_long
ais #2
pula
sta *__r0
pula
sta *__r1
lda *__r0
sta ,X
lda *__r1
sta 1,X
L13:
lda ,X
sta 2,X
lda 1,X
sta 3,X
; T1SC|=(1<<5); //停止定時器1計數器計數
bset #5,0x20
; //[設置PWM脈寬]
; T1CH0H = (Duty>>8); //設置高字節
lda 2,X
sta 0x26
; T1CH0L = Duty; //設置低字節
lda 3,X
sta 0x27
; T1SC&=~(1<<5); //允許定時器1計數器計數
bclr #5,0x20
; Delay_ms(2000); //延時100ms
lda #-48
psha
jsr _Delay_ms
ais #1
tsx
L10:
ais #6
.dbline 0 ; func end
rts
; Temp -> 0,X
; Period -> 4,X
_PWMInit::
ais #-2
tsx
; }
;
;
; /*PWMconf:PWM初始化設置--------------------------------*
; * 功 能:PWM脈沖周期、占空比的設置 *
; * 參 數:rate=脈寬時鐘數,cyc=脈沖周期時鐘數 *
; * 返 回:無 *
; *-----------------------------------------------------*/
; void PWMInit(unsigned int Period)
; {
; unsigned int Temp=Period;
lda 4,X
sta ,X
lda 5,X
sta 1,X
; //不允許溢出中斷,不啟動計數,分頻因子=64,置位TSTOP,TRST
; T1SC = 0x36;
lda #54
sta 0x20
; //[設置PWM周期]
; T1MODH = (Temp>>8);
lda ,X
sta 0x23
; T1MODL = Period;
lda 5,X
sta 0x24
; //[初始化設置PWM脈寬為0]
; T1CH0H = 0x00;
clr 0x26
; T1CH0L = 0x00;
clr 0x27
; //設為PWM模式,不允許輸出比較中斷,輸出低電平,不帶緩沖
; T1SC0 = 0x1E;
lda #30
sta 0x25
; //允許定時器1計數寄存器計數
; T1SC &= 0xDF;
lda 0x20
and #-33
sta 0x20
L14:
ais #2
.dbline 0 ; func end
rts
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -