📄 m16adc.s
字号:
.module M16ADC.c
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
.dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
.dbfunc e ChangeIntToHex _ChangeIntToHex fV
; dec -> R20,R21
.even
_ChangeIntToHex::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 136
; /*******************************************************************
; 实验七
; 实验名称: ADC转换实验
; 实验目的: 学习AVR单片机的ADC功能
; 实验现象: 串口发送命令开启一次ADC,并将结果通过串口发送到PC,任意字符开始
; 环 境: ICCAVR6.31A
; 设 计 者: shinea8868
; 说 明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
; 作商业用途请保留本段文字
; 完成日期: 2007年4月10日
; *******************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include "..\ICC_H\SOFTWARE.h"
;
; uchar UcAdcData; //ADC转换的结果
; uchar AdcConCom = 0; //ADC转换完成标志
; uchar admuxx = 0x67; //外部参考源,数据存储左对齐方式
; /*--------------------------------------------------------------------
; 功 能: ADC转换初始化设定
; 入口参数:
; 返 回 值:
; --------------------------------------------------------------------*/
; void AdcInit(void)
; {
; ADCSR = 0x00; //ADC无效
; ADMUX = admuxx; //选择ADC通道7
; /*--REFS1---REFS0---ADLAR---0--------------参考电源选择------对齐方式--------*/
; /*--0000-- 0001-- 0010-- 0011-- 0100-- 0101-- 0110-- 0111-- 1110--- --1111---*/
; /*--通道0--通道1--通道2--通道3--通道4--通道5--通道6-通道7--1.23V(VBG)-0V(GND)*/
; ACSR = 0x80; //模拟比较器控制和状态寄存器 ACSR
; //ACD置1,使模拟比较器禁用
; /*--ACD--ACBG--ACO--ACI---ACIE---ACIC---ACIS1---ACIS0------------------------*/
; /*-模拟比较起禁用--模拟比较器的能隙基准源--模拟比较起输出--模拟比较器中断标志*/
; /*-模拟比较器中断使能--模拟比较器输入捕捉使能--模拟比较器中断模式选择--------*/
; ADCSR = 0x8B;//模拟比较起控制和状态寄存器
; /*-----------ADEN---ADSC---ADFR---ADIF---ADIE---ADPS2---ADPS1---ADPS0--------*/
; //使能模数转换 ADC开始转换 ADC连续转换 ADC中断使能 128分频
; }
; /*-----------------------ADC转换中断程序--------------------------------------*/
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
; UcAdcData = ADCH; //读ADC转换结果
; AdcConCom = 1; //置ADC转换完成标志
; }
;
; /*-----------------------------------------------------------------
; 函数名称: void Uart0Init(void)
; 函数功能: 串口初始化
; 波特率 9600 0.2% 字符长度 8bit 无奇偶校验
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void Uart0Init(void)
; {
; UCSRB = 0x00; //关串口
; UCSRA = 0x02; //倍速模式 M16中文P151
; UCSRC = BIT(URSEL) | 0x06; //写UCSRC寄存器,设定8个bit
; UBRR = 0x000c; //设定串口波特率为9600
; UCSRB = 0x98; //开串口
; }
; /*-----------------------------------------------------------------
; 函数名称: void Uart0Init(void)
; 函数功能: 串口初始化
; 波特率 9600 0.2% 字符长度 8bit 无奇偶校验
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; #pragma interrupt_handler UartRecvData:12
; void UartRecvData(void)
; {
; uchar temp;
; temp = UDR;
; ADMUX |= 0x07;
; ADCSR |= 0x40; //开启一次ADC转换
; }
; /*-----------------------------------------------------------------
; 函数名称: void UartTransmitData(void)
; 函数功能: 发送字符串
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void UartTransmitData(void)
; {
; while(!(UCSRA&0x20)); //判断数据寄存器是否为空
; UDR = UcAdcData;
; }
; /*-----------------------------------------------------------------
; 函数名称: void InitDevices(void)
; 函数功能: 初始化各种信息
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void InitDevices(void)
; {
; CLI(); //关全部中断
; Uart0Init();
; AdcInit();
;
; MCUCR = 0x00;
; SEI(); //开全中断
; }
;
;
; void main(void)
; {
; // uchar i;
; InitDevices();
; while(1)
; {
; if( AdcConCom)
; {
; AdcConCom = 0; //清ADC转换完成标志
; UartTransmitData(); //发送转换结果
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 137
; }
movw R30,R20
ldd R2,z+0
clr R3
ldi R17,10
mov R16,R2
xcall mod8u
mov R4,R16
ldi R17,10
mov R16,R2
xcall div8u
mov R24,R16
andi R24,#0x0F
swap R24
or R24,R4
movw R30,R20
std z+0,R24
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r dec 20 pc
.dbend
.dbfunc e ChangeHexToInt _ChangeHexToInt fV
; hex -> R16,R17
.even
_ChangeHexToInt::
.dbline -1
.dbline 166
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 167
; }
movw R30,R16
ldd R2,z+0
clr R3
mov R24,R2
swap R24
andi R24,#0x0F
ldi R25,10
mul R25,R24
mov R24,R2
andi R24,15
mov R2,R0
add R2,R24
std z+0,R2
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r hex 16 pc
.dbend
.dbfunc e Delay _Delay fV
; i -> R16
.even
_Delay::
.dbline -1
.dbline 180
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 182
; }
; }
ldi R16,200
L4:
.dbline 183
L5:
.dbline 183
; }
mov R2,R16
clr R3
subi R16,1
tst R2
brne L4
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.area data(ram, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
_AdcConCom::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
.dbsym e AdcConCom _AdcConCom c
_admuxx::
.blkb 1
.area idata
.byte 103
.area data(ram, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
.dbsym e admuxx _admuxx c
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
.dbfunc e AdcInit _AdcInit fV
.even
_AdcInit::
.dbline -1
.dbline 25
.dbline 26
clr R2
out 0x6,R2
.dbline 27
lds R2,_admuxx
out 0x7,R2
.dbline 31
ldi R24,128
out 0x8,R24
.dbline 36
ldi R24,139
out 0x6,R24
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 56
jmp _adc_isr
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
st -y,R2
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 43
.dbline 44
in R2,0x5
sts _UcAdcData,R2
.dbline 45
ldi R24,1
sts _AdcConCom,R24
.dbline -2
L8:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e Uart0Init _Uart0Init fV
.even
_Uart0Init::
.dbline -1
.dbline 56
.dbline 57
clr R2
out 0xa,R2
.dbline 58
ldi R24,2
out 0xb,R24
.dbline 59
ldi R24,134
out 0x20,R24
.dbline 60
ldi R24,12
out 0x9,R24
.dbline 61
ldi R24,152
out 0xa,R24
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 44
jmp _UartRecvData
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
.dbfunc e UartRecvData _UartRecvData fV
; temp -> R16
.even
_UartRecvData::
st -y,R16
st -y,R24
in R16,0x3f
st -y,R16
.dbline -1
.dbline 72
.dbline 74
in R16,0xc
.dbline 75
in R24,0x7
ori R24,7
out 0x7,R24
.dbline 76
sbi 0x6,6
.dbline -2
L10:
ld R16,y+
out 0x3f,R16
ld R24,y+
ld R16,y+
.dbline 0 ; func end
reti
.dbsym r temp 16 c
.dbend
.dbfunc e UartTransmitData _UartTransmitData fV
.even
_UartTransmitData::
.dbline -1
.dbline 85
L12:
.dbline 86
L13:
.dbline 86
sbis 0xb,5
rjmp L12
.dbline 87
lds R2,_UcAdcData
out 0xc,R2
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e InitDevices _InitDevices fV
.even
_InitDevices::
.dbline -1
.dbline 96
.dbline 97
cli
.dbline 98
xcall _Uart0Init
.dbline 99
xcall _AdcInit
.dbline 101
clr R2
out 0x35,R2
.dbline 102
sei
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 107
.dbline 109
xcall _InitDevices
xjmp L18
L17:
.dbline 111
.dbline 112
lds R2,_AdcConCom
tst R2
breq L20
.dbline 113
.dbline 114
clr R2
sts _AdcConCom,R2
.dbline 115
xcall _UartTransmitData
.dbline 116
L20:
.dbline 117
L18:
.dbline 110
xjmp L17
X0:
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
_UcAdcData::
.blkb 1
.dbsym e UcAdcData _UcAdcData c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -