📄 main.s
字号:
.module main.c
.area text
; q -> 0,X
; a -> 1,X
; t -> 5,X
; p -> 7,X
; b -> 8,X
_main::
ais #-9
tsx
; /*-----------------------------------------------------*
; *工 程 名:AD.prj *
; *硬件连接:PTB0/AD0 接模拟量输入端 *
; *程序描述:获取1路A/D转换结果,并滤波,通过串口发送出去 *
; *目 的:掌握AD转换的基本编程方法 *
; *注 意:用SD-1实验板测试时,把液晶拔出,否则可能影响结果*
; *----------《嵌入式应用技术基础教程》教学实例---------*/
; /*[头文件]*/
; #include "GP32C.H"
; /*[函数声明]*/
; extern void SCIInit(void); //串行口函数声明
; extern void SCISend1(unsigned char o);
; extern void SCISendN(unsigned char n,unsigned char ch[]);
; //有关A/D转换函数声明
; extern unsigned char adave(unsigned char n,unsigned char channel);
; extern unsigned char advalue(unsigned char channel);
; extern unsigned char admid(unsigned char channel);
; /*[主程序]*/
; void main(void)
; { float a;
; int t;
; unsigned char p,b,q;
; SCIInit(); //串行口初始化
jsr _SCIInit
tsx
; ADCLK=0b00110000; //A/D用内部总线时钟,2分频
lda #48
sta 0x3e
jmp L3
L2:
; while(1){
;
; a=adave(20,0)/51.0;
clra
psha
lda #20
psha
jsr _adave
ais #2
tsx
clr *__r0
psha
lda *__r0
psha
clra
psha
psha
tst 3,SP
bpl X0
com 2,SP
com 1,SP
X0:
jsr __long_to_SPfloat
clra
psha
psha
lda #76
psha
lda #66
psha
jsr __SPFloat_div
ais #4
pula
sta 1,X
pula
sta 2,X
pula
sta 3,X
pula
sta 4,X
; t=a*100;
clra
psha
psha
lda #-56
psha
lda #66
psha
lda 4,X
psha
lda 3,X
psha
lda 2,X
psha
lda 1,X
psha
jsr __SPFloat_mul
ais #4
jsr __SPFloat_to_long
ais #2
pula
sta 5,X
pula
sta 6,X
; SCISendN(14,"通道0电压值是");
ldhx #L5
pshx
pshh
lda #14
psha
jsr _SCISendN
ais #3
tsx
; p=t/100;
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #100
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rlo,*__r1
lda *__r1
sta 7,X
; SCISend1(p+0x30);
add #48
psha
jsr _SCISend1
ais #1
; SCISend1('.');
lda #46
psha
jsr _SCISend1
ais #1
tsx
; b=t%100/10;
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #100
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
sta *__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rlo,*__r1
lda *__r1
sta 8,X
; SCISend1(b+0x30);
add #48
psha
jsr _SCISend1
ais #1
tsx
; q=t%10;
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #10
psha
clra
psha
jsr __divmod16s
pula
pula
sta ,X
; SCISend1(q+0x30);
add #48
psha
jsr _SCISend1
ais #1
; SCISendN(3,"伏");
ldhx #L6
pshx
pshh
lda #3
psha
jsr _SCISendN
ais #3
tsx
; for(p=0;p<1000;p++)
clr 7,X
bra L10
L7:
clr 8,X
bra L14
L11:
L12:
inc 8,X
L14:
lda 8,X
cmp #-6
blo L11
L8:
inc 7,X
L10:
lda 7,X
cmp #-24
blo L7
ldhx #L15
pshx
pshh
lda #7
psha
jsr _SCISendN
ais #3
lda #1
psha
lda #20
psha
jsr _adave
ais #2
tsx
clr *__r0
psha
lda *__r0
psha
clra
psha
psha
tst 3,SP
bpl X1
com 2,SP
com 1,SP
X1:
jsr __long_to_SPfloat
clra
psha
psha
lda #76
psha
lda #66
psha
jsr __SPFloat_div
ais #4
pula
sta 1,X
pula
sta 2,X
pula
sta 3,X
pula
sta 4,X
clra
psha
psha
lda #-56
psha
lda #66
psha
lda 4,X
psha
lda 3,X
psha
lda 2,X
psha
lda 1,X
psha
jsr __SPFloat_mul
ais #4
jsr __SPFloat_to_long
ais #2
pula
sta 5,X
pula
sta 6,X
ldhx #L16
pshx
pshh
lda #14
psha
jsr _SCISendN
ais #3
tsx
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #100
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rlo,*__r1
lda *__r1
sta 7,X
add #48
psha
jsr _SCISend1
ais #1
lda #46
psha
jsr _SCISend1
ais #1
tsx
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #100
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
sta *__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rlo,*__r1
lda *__r1
sta 8,X
add #48
psha
jsr _SCISend1
ais #1
tsx
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #10
psha
clra
psha
jsr __divmod16s
pula
pula
sta ,X
add #48
psha
jsr _SCISend1
ais #1
ldhx #L6
pshx
pshh
lda #3
psha
jsr _SCISendN
ais #3
ldhx #L15
pshx
pshh
lda #7
psha
jsr _SCISendN
ais #3
tsx
L3:
jmp L2
X2:
L1:
ais #9
.dbline 0 ; func end
rts
.area lit
L16:
.byte 205,168,181,192,49,181,231,209,185,214,181,202,199,0
L15:
.byte 32,32,32,0
L6:
.byte 183,252,0
L5:
.byte 205,168,181,192,48,181,231,209,185,214,181,202,199,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -