📄 main.s
字号:
.module main.c
.area text
; pl -> 0,X
; va -> 1,X
; t -> 3,X
; i -> 5,X
_main::
ais #-6
tsx
; /*-----------------------------------------------------*
; *工 程 名:AD.prj *
; *硬件连接:PTB0/AD0 接模拟量输入端 *
; *程序描述:获取1路A/D转换结果,并滤波,通过串口发送出去 *
; *目 的:掌握AD转换的基本编程方法 *
; *注 意:用SD-1实验板测试时,把液晶拔出,否则可能影响结果*
; *----------《嵌入式应用技术基础教程》教学实例---------*/
; /*[头文件]*/
; #include "GP32C.H"
; /*[函数声明]*/
; extern void SCIInit(void); //串行口函数声明
; extern void SCISend1(unsigned char o);
; 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)
; { int t;
; unsigned char i;
; unsigned char pl;
; int va;//定义变量
; SCIInit(); //串行口初始化
jsr _SCIInit
tsx
; ADCLK=0b00110000; //A/D用内部总线时钟,2分频
lda #48
sta 0x3e
jmp L3
L2:
; while(1)//死循环
; {
; SCISendN(11,"通道0电压值");//发送通道0的电压值
ldhx #L5
pshx
pshh
lda #11
psha
jsr _SCISendN
ais #3
; pl=adave(20,0);//接收对收到的值滤波后取得的值。20*3(取中)
clra
psha
lda #20
psha
jsr _adave
ais #2
tsx
sta *__r1
sta ,X
; va=pl*5/255+48;//取第一位
clr *__r0
lda #5
psha
clra
psha
lda *__r1
psha
lda *__r0
psha
jsr __mul16
ais #4
mov *__rlo,*__r1
mov *__rhi,*__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #-1
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
lda *__r1
add #48
sta 2,X
lda *__r0
adc #0
sta 1,X
; SCISend1(va);//输出第一位的数值
lda 2,X
psha
jsr _SCISend1
ais #1
; SCISend1('.');//输出符号位
lda #46
psha
jsr _SCISend1
ais #1
tsx
; va=(pl*10/51)%10+48;//取第二位的数值
clr *__r0
lda ,X
sta *__r1
lda #10
psha
clra
psha
lda *__r1
psha
lda *__r0
psha
jsr __mul16
ais #4
mov *__rlo,*__r1
mov *__rhi,*__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #51
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
add #48
sta 2,X
lda *__r0
adc #0
sta 1,X
; SCISend1(va);//发送
lda 2,X
psha
jsr _SCISend1
ais #1
tsx
; va=((pl*100)/51)%10+48;//取最后一位的数值
clr *__r0
lda ,X
sta *__r1
lda #100
psha
clra
psha
lda *__r1
psha
lda *__r0
psha
jsr __mul16
ais #4
mov *__rlo,*__r1
mov *__rhi,*__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #51
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
add #48
sta 2,X
lda *__r0
adc #0
sta 1,X
; SCISend1(va);//发送
lda 2,X
psha
jsr _SCISend1
ais #1
; SCISendN(2,"伏");//发送伏;
ldhx #L6
pshx
pshh
lda #2
psha
jsr _SCISendN
ais #3
tsx
; for(t=0;t<1024;t++)
clr 4,X
clr 3,X
L7:
clr 5,X
bra L14
L11:
L12:
inc 5,X
L14:
lda 5,X
cmp #100
blo L11
L8:
lda 4,X
add #1
sta 4,X
lda 3,X
adc #0
sta 3,X
lda 4,X
sta *__r1
lda 3,X
sta *__r0
ldhx *__r0
cphx #1024
tsx
blt L7
; for(i=0;i<100;i++); //延时0.5S
; pl=adave(20,1);
lda #1
psha
lda #20
psha
jsr _adave
ais #2
tsx
sta *__r1
sta ,X
; SCISendN(11,"通道1电压值");//发送通道1的电压值
ldhx #L15
pshx
pshh
lda #11
psha
jsr _SCISendN
ais #3
tsx
; va=pl*5/255+48;
clr *__r0
lda ,X
sta *__r1
lda #5
psha
clra
psha
lda *__r1
psha
lda *__r0
psha
jsr __mul16
ais #4
mov *__rlo,*__r1
mov *__rhi,*__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #-1
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
lda *__r1
add #48
sta 2,X
lda *__r0
adc #0
sta 1,X
; SCISend1(va);
lda 2,X
psha
jsr _SCISend1
ais #1
; SCISend1('.');
lda #46
psha
jsr _SCISend1
ais #1
tsx
; va=(pl*10/51)%10+48;
clr *__r0
lda ,X
sta *__r1
lda #10
psha
clra
psha
lda *__r1
psha
lda *__r0
psha
jsr __mul16
ais #4
mov *__rlo,*__r1
mov *__rhi,*__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #51
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
add #48
sta 2,X
lda *__r0
adc #0
sta 1,X
; SCISend1(va);
lda 2,X
psha
jsr _SCISend1
ais #1
tsx
; va=((pl*100)/51)%10+48;
clr *__r0
lda ,X
sta *__r1
lda #100
psha
clra
psha
lda *__r1
psha
lda *__r0
psha
jsr __mul16
ais #4
mov *__rlo,*__r1
mov *__rhi,*__r0
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #51
psha
clra
psha
jsr __divmod16s
ais #2
mov *__rhi,*__r0
mov *__rlo,*__r1
mov *__r1,*__rlo
mov *__r0,*__rhi
lda #10
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
add #48
sta 2,X
lda *__r0
adc #0
sta 1,X
; SCISend1(va);
lda 2,X
psha
jsr _SCISend1
ais #1
; SCISendN(2,"伏");
ldhx #L6
pshx
pshh
lda #2
psha
jsr _SCISendN
ais #3
tsx
; for(t=0;t<1024;t++)
clr 4,X
clr 3,X
L16:
clr 5,X
bra L23
L20:
L21:
inc 5,X
L23:
lda 5,X
cmp #100
blo L20
L17:
lda 4,X
add #1
sta 4,X
lda 3,X
adc #0
sta 3,X
lda 4,X
sta *__r1
lda 3,X
sta *__r0
ldhx *__r0
cphx #1024
tsx
blt L16
L3:
jmp L2
X0:
L1:
ais #6
.dbline 0 ; func end
rts
.area lit
L15:
.byte 205,168,181,192,49,181,231,209,185,214,181,0
L6:
.byte 183,252,0
L5:
.byte 205,168,181,192,48,181,231,209,185,214,181,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -