hd_support.lis

来自「《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码」· LIS 代码 · 共 328 行 · 第 1/2 页

LIS
328
字号
 001E           ;     PORTB = 0b11111111;                 //在PB口0..5上输出光柱效果
 001E 8FEF              ldi R24,255
 0020 85B9              out 0x5,R24
 0022                   .dbline 116
 0022           ;     PORTC = 0b11110111;                 //初始化PC口,PC.3设置为输入
 0022 87EF              ldi R24,247
 0024 88B9              out 0x8,R24
 0026                   .dbline 117
 0026           ;     PORTD = 0b11111111;                 //没有使用的端口均设置为输入状态并开启内部上拉电阻
 0026 8FEF              ldi R24,255
 0028 8BB9              out 0xb,R24
 002A                   .dbline 119
 002A           ;     
 002A           ;     DDRB = 0b11111111;
 002A 84B9              out 0x4,R24
 002C                   .dbline 120
 002C           ;     DDRC = 0b11110111;
 002C 87EF              ldi R24,247
 002E 87B9              out 0x7,R24
 0030                   .dbline 121
 0030           ;     DDRD = 0b00000000;
 0030 2224              clr R2
 0032 2AB8              out 0xa,R2
 0034                   .dbline -2
 0034           L2:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbend
 0036                   .dbfunc e Timer0_INIT _Timer0_INIT fV
                        .even
 0036           _Timer0_INIT::
 0036                   .dbline -1
 0036                   .dbline 131
 0036           ; }
 0036           ; 
 0036           ; /***********************************************************
 0036           ; *   函数声明:定时器0初始化函数                            *
 0036           ; *   输入:    无                                           *
 0036           ; *   输出:    无                                           *
 0036           ; *   调用函数:无                                           *
 0036           ; ***********************************************************/
 0036           ; void Timer0_INIT(void)
 0036           ; {
 0036                   .dbline 134
 0036           ;     //*在这里粘贴从代码生成向导中生成的初始化代码*//
 0036           ;     //*要求为1K的溢出中断                        *//
 0036           ;     TCCR0B = 0x00;                      //停止定时器0
 0036 2224              clr R2
 0038 25BC              out 0x25,R2
 003A                   .dbline 135
 003A           ;     TCNT0 = 0xFD;                       //设置定时器初始值
 003A 8DEF              ldi R24,253
 003C 86BD              out 0x26,R24
 003E                   .dbline 136
 003E           ;     TCCR0A = 0x00;                      //关闭定时器比较匹配功能
 003E 24BC              out 0x24,R2
 0040                   .dbline 137
 0040           ;     TCCR0B = 0x04;                      //启动定时器,256分频
 0040 84E0              ldi R24,4
 0042 85BD              out 0x25,R24
 0044                   .dbline -2
 0044           L3:
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbend
 0046                   .dbfunc e Timer0_OVF_ISR _Timer0_OVF_ISR fV
                        .even
 0046           _Timer0_OVF_ISR::
 0046 00D0              rcall push_lset
 0048                   .dbline -1
 0048                   .dbline 147
 0048           ; }
 0048           ; 
 0048           ; /***********************************************************
 0048           ; *   函数声明:定时器0溢出中断处理程序                      *
 0048           ; *   输入:    无                                           *
 0048           ; *   输出:    无                                           *
 0048           ; *   调用函数:INSERT_TIMER0_OVF_ISR_CODE                   *
 0048           ; ***********************************************************/
 0048           ; void Timer0_OVF_ISR(void)
 0048           ; {
 0048                   .dbline 149
 0048           ;     //*这里要添加对定时计数器重新设置计数底数的代码*//
 0048           ;       INSERT_TIMER0_OVF_ISR_CODE
 0048 7894              sei
 004A                   .dbline 149
 004A 00D0              rcall _Insert_Timer0_OVF_ISR_Code
 004C                   .dbline -2
 004C           L4:
 004C 00D0              rcall pop_lset
 004E                   .dbline 0 ; func end
 004E 1895              reti
 0050                   .dbend
 0050                   .dbfunc e ADC_INIT _ADC_INIT fV
                        .even
 0050           _ADC_INIT::
 0050                   .dbline -1
 0050                   .dbline 163
 0050           ; }
 0050           ; 
 0050           ; /***********************************************************
 0050           ; *  函数说明:ADC初始化程序                                 *
 0050           ; *  输入:    无                                            *
 0050           ; *  输出:    无                                            *
 0050           ; * -------------------------------------------------------- *
 0050           ; *  [说明]                                                  *
 0050           ; *            这里的代码是为了方便大家理解直接从代码生成器  *
 0050           ; *        中生成,经过简单错误修改后的代码。以后使用的时候,*
 0050           ; *        我们将采用更为规范的格式。                        *
 0050           ; ***********************************************************/
 0050           ; void ADC_INIT(void)
 0050           ; {
 0050                   .dbline 164
 0050           ;     ADMUX = 0x43;                       //选择AVCC,结果右对齐,选择ADC通道3
 0050 83E4              ldi R24,67
 0052 80937C00          sts 124,R24
 0056                   .dbline 165
 0056           ;     ADCSRA = 0x8C;                      //ADC模块使能,未开始转换,自动触发关闭,中断使能,预分频比16
 0056 8CE8              ldi R24,140
 0058 80937A00          sts 122,R24
 005C                   .dbline 166
 005C           ;     ADCSRB = 0x00;                      //ACME用于模拟比较器,这里忽略.由于没有使用自动触发功能,对ADTS的设置没有意义
 005C 2224              clr R2
 005E 20927B00          sts 123,R2
 0062                   .dbline -2
 0062           L5:
 0062                   .dbline 0 ; func end
 0062 0895              ret
 0064                   .dbend
 0064                   .dbfunc e ADC_ISR _ADC_ISR fV
                        .even
 0064           _ADC_ISR::
 0064 00D0              rcall push_lset
 0066                   .dbline -1
 0066                   .dbline 183
 0066           ; 
 0066           ;     /*
 0066           ;     ADMUX = (ADMUX_AREF<<REFS0)|(3<<MUX0);
 0066           ;     ADCSRA = (1<<ADEN)|(1<<ADIE)|(ADCSRA_PRESCALER_DIV_16<<ADPS0);
 0066           ;     ASCSRB = 0x00;
 0066           ;     */
 0066           ; }
 0066           ; 
 0066           ; /***********************************************************
 0066           ; *   函数声明:ADC转换完成中断处理程序                      *
 0066           ; *   输入:    无                                           *
 0066           ; *   输出:    无                                           *
 0066           ; *   调用函数:INSERT_ADC_ISR_CODE                          *
 0066           ; ***********************************************************/
 0066           ; 
 0066           ; void ADC_ISR (void)
 0066           ; {
 0066                   .dbline 184
 0066           ;     INSERT_ADC_ISR_CODE
 0066 7894              sei
 0068                   .dbline 184
 0068 00D0              rcall _Insert_Adc_ISR_Code
 006A                   .dbline -2
 006A           L6:
 006A 00D0              rcall pop_lset
 006C                   .dbline 0 ; func end
 006C 1895              reti
 006E                   .dbend

⌨️ 快捷键说明

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