⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m16adc.lis

📁 AVR程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module M16ADC.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\job\M16学习板\ADC(实验七)\M16ADC.c
 0000                   .dbfile F:\job\M16学习板\ADC(实验七)\..\ICC_H\SOFTWARE.h
 0000                   .dbfunc e ChangeIntToHex _ChangeIntToHex fV
 0000           ;            dec -> R20,R21
                        .even
 0000           _ChangeIntToHex::
 0000 0E940000          xcall push_gset1
 0004 A801              movw R20,R16
 0006                   .dbline -1
 0006                   .dbline 136
 0006           ; /*******************************************************************
 0006           ;                       实验七
 0006           ; 实验名称: ADC转换实验
 0006           ; 实验目的: 学习AVR单片机的ADC功能
 0006           ; 实验现象: 串口发送命令开启一次ADC,并将结果通过串口发送到PC,任意字符开始
 0006           ; 环      境: ICCAVR6.31A
 0006           ; 设 计 者: shinea8868
 0006           ; 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
 0006           ;                 作商业用途请保留本段文字
 0006           ; 完成日期: 2007年4月10日
 0006           ; *******************************************************************/
 0006           ; #include <iom16v.h>
 0006           ; #include <macros.h>
 0006           ; #include "..\ICC_H\SOFTWARE.h"
 0006           ; 
 0006           ; uchar UcAdcData;                     //ADC转换的结果
 0006           ; uchar AdcConCom = 0;                           //ADC转换完成标志
 0006           ; uchar admuxx = 0x67;                                   //外部参考源,数据存储左对齐方式                         
 0006           ; /*--------------------------------------------------------------------
 0006           ; 功    能: ADC转换初始化设定
 0006           ; 入口参数: 
 0006           ; 返 回 值: 
 0006           ; --------------------------------------------------------------------*/
 0006           ; void AdcInit(void)
 0006           ; {
 0006           ;  ADCSR           = 0x00;                          //ADC无效
 0006           ;  ADMUX           = admuxx;                        //选择ADC通道7
 0006           ;  /*--REFS1---REFS0---ADLAR---0--------------参考电源选择------对齐方式--------*/
 0006           ;  /*--0000-- 0001-- 0010-- 0011-- 0100-- 0101-- 0110-- 0111-- 1110--- --1111---*/
 0006           ;  /*--通道0--通道1--通道2--通道3--通道4--通道5--通道6-通道7--1.23V(VBG)-0V(GND)*/
 0006           ;  ACSR      = 0x80;                           //模拟比较器控制和状态寄存器 ACSR
 0006           ;                                              //ACD置1,使模拟比较器禁用
 0006           ;  /*--ACD--ACBG--ACO--ACI---ACIE---ACIC---ACIS1---ACIS0------------------------*/
 0006           ;  /*-模拟比较起禁用--模拟比较器的能隙基准源--模拟比较起输出--模拟比较器中断标志*/
 0006           ;  /*-模拟比较器中断使能--模拟比较器输入捕捉使能--模拟比较器中断模式选择--------*/
 0006           ;  ADCSR     = 0x8B;//模拟比较起控制和状态寄存器
 0006           ;  /*-----------ADEN---ADSC---ADFR---ADIF---ADIE---ADPS2---ADPS1---ADPS0--------*/
 0006           ;  //使能模数转换 ADC开始转换 ADC连续转换  ADC中断使能  128分频
 0006           ; }
 0006           ; /*-----------------------ADC转换中断程序--------------------------------------*/
 0006           ; #pragma interrupt_handler adc_isr:15
 0006           ; void adc_isr(void)
 0006           ; {
 0006           ;       UcAdcData = ADCH;          //读ADC转换结果
 0006           ;       AdcConCom = 1;                     //置ADC转换完成标志
 0006           ; }
 0006           ; 
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void Uart0Init(void) 
 0006           ; 函数功能: 串口初始化
 0006           ;                 波特率 9600 0.2% 字符长度 8bit 无奇偶校验
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void Uart0Init(void)
 0006           ; {
 0006           ;       UCSRB = 0x00;                                   //关串口
 0006           ;       UCSRA = 0x02;                                   //倍速模式   M16中文P151
 0006           ;       UCSRC = BIT(URSEL) | 0x06;              //写UCSRC寄存器,设定8个bit
 0006           ;       UBRR  = 0x000c;                                 //设定串口波特率为9600
 0006           ;       UCSRB = 0x98;                                   //开串口
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void Uart0Init(void) 
 0006           ; 函数功能: 串口初始化
 0006           ;                 波特率 9600 0.2% 字符长度 8bit 无奇偶校验
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; #pragma interrupt_handler UartRecvData:12
 0006           ; void UartRecvData(void)
 0006           ; {
 0006           ;       uchar temp;
 0006           ;       temp = UDR;
 0006           ;       ADMUX |= 0x07; 
 0006           ;       ADCSR |= 0x40;                                  //开启一次ADC转换
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void UartTransmitData(void)
 0006           ; 函数功能: 发送字符串
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void UartTransmitData(void)
 0006           ; {
 0006           ;       while(!(UCSRA&0x20));                           //判断数据寄存器是否为空
 0006           ;               UDR = UcAdcData;
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void InitDevices(void) 
 0006           ; 函数功能: 初始化各种信息
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void InitDevices(void)
 0006           ; {
 0006           ;       CLI();                                                          //关全部中断
 0006           ;       Uart0Init();
 0006           ;       AdcInit();
 0006           ; 
 0006           ;       MCUCR = 0x00;
 0006           ;       SEI();                                                          //开全中断
 0006           ; }
 0006           ; 
 0006           ; 
 0006           ; void main(void)
 0006           ; {
 0006           ; //    uchar i;
 0006           ;       InitDevices();
 0006           ;       while(1)
 0006           ;       {
 0006           ;               if( AdcConCom)
 0006           ;               {
 0006           ;                       AdcConCom = 0;                          //清ADC转换完成标志
 0006           ;                       UartTransmitData();                     //发送转换结果
 0006           ;               }
 0006           ;       }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006                   .dbline 137
 0006           ; }
 0006 FA01              movw R30,R20
 0008 2080              ldd R2,z+0
 000A 3324              clr R3
 000C 1AE0              ldi R17,10
 000E 022D              mov R16,R2
 0010 0E940000          xcall mod8u
 0014 402E              mov R4,R16
 0016 1AE0              ldi R17,10
 0018 022D              mov R16,R2
 001A 0E940000          xcall div8u
 001E 802F              mov R24,R16
 0020 8F70              andi R24,#0x0F
 0022 8295              swap R24
 0024 8429              or R24,R4
 0026 FA01              movw R30,R20
 0028 8083              std z+0,R24
 002A                   .dbline -2
 002A           L1:
 002A 0E940000          xcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r dec 20 pc
 0030                   .dbend
 0030                   .dbfunc e ChangeHexToInt _ChangeHexToInt fV
 0030           ;            hex -> R16,R17
                        .even
 0030           _ChangeHexToInt::
 0030                   .dbline -1
 0030                   .dbline 166
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030                   .dbline 167
 0030           ; }
 0030 F801              movw R30,R16
 0032 2080              ldd R2,z+0
 0034 3324              clr R3
 0036 822D              mov R24,R2
 0038 8295              swap R24
 003A 8F70              andi R24,#0x0F
 003C 9AE0              ldi R25,10
 003E 989F              mul R25,R24
 0040 822D              mov R24,R2
 0042 8F70              andi R24,15
 0044 202C              mov R2,R0
 0046 280E              add R2,R24
 0048 2082              std z+0,R2
 004A                   .dbline -2
 004A           L2:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r hex 16 pc
 004C                   .dbend
 004C                   .dbfunc e Delay _Delay fV
 004C           ;              i -> R16
                        .even
 004C           _Delay::
 004C                   .dbline -1
 004C                   .dbline 180
 004C           ; }
 004C           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -