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

📄 m16t1.lis

📁 AVR程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module M16T1.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 0000                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\..\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           ; 实验名称: 定时器1中断实验
 0006           ; 实验目的: 学习AVR单片机的定时器功能
 0006           ; 实验现象: 定时器每秒加一,0到255循环,通过数码管显示计数值
 0006           ; 环      境: ICCAVR6.31A
 0006           ; 设 计 者: shinea8868
 0006           ; 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
 0006           ;                 作商业用途请保留本段文字
 0006           ; 完成日期: 2007年4月10日
 0006           ; *******************************************************************/
 0006           ; 
 0006           ; #include <iom16v.h>
 0006           ; #include <macros.h>
 0006           ; #include "..\ICC_H\SOFTWARE.h"
 0006           ; 
 0006           ; uchar TimerCnt = 0;                                           //定时器1计数个数
 0006           ; uchar disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 0006           ; 
 0006           ; /*-----------------------------------------------------------------
 0006           ;     延时程序计算方法
 0006           ;       计数个数j = 延时时间/6*晶振频率 - 1
 0006           ; 函数名称: void DelayMs(uchar i)
 0006           ; 函数功能: 毫秒延时
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void DelayMs(uchar i)
 0006           ; {
 0006           ;       uchar j;
 0006           ;       while(i--)
 0006           ;       {
 0006           ;               j = 167;//1mhz 1ms延时
 0006           ;           while(j--);
 0006           ;       }
 0006           ; }
 0006           ; 
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void SPIMasterInit(void) 
 0006           ; 函数功能: SPI初始化为主机
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void SPIMasterInit(void) 
 0006           ; {
 0006           ; //    MOSI,MISO,SCK等都需要设计的数据方向定义
 0006           ;       DDRB |= (1<<PB5) | (1<<PB7);            // 设置MOSI 和SCK 为输出,其他为输入 M16
 0006           ; //    DDRB |= (1<<PB2) | (1<<PB3);            // 设置MOSI 和SCK 为输出,其他为输入 M64
 0006           ; //    SPI控制寄存器
 0006           ; //    SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
 0006           ; //    SPIE  中断使能  SPE SPI使能 DORD 数据次序 1为LSB首先发送,0为MSB首先发送
 0006           ; //    MSTR  主从选择 1为主,0为从MSTR置位时选择主机模式,否则为从机.如果MSTR为"1",
 0006           ; //  SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位.用户必须重新设置
 0006           ; //    MSTR 进入主机模式。
 0006           ; //    CPOL: 时钟极性见ATMEGA16L(中文)P130
 0006           ; //    CPHA: 时钟相位
 0006           ; //    SPR1, SPR0: SPI 时钟速率选择1 与0  SPR1 和SPR0 对从机没有影响。
 0006           ; //  使能SPI 主机模式,设置时钟速率为fck/128 */
 0006           ;       SPCR  = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0);           
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void SPIMasterTransmit(unsigned char i) 
 0006           ; 函数功能: SPI数据发送
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void SPIMasterTransmit(uchar TranData) 
 0006           ; {     
 0006           ;       SPDR = TranData;                                        // 启动数据传输 
 0006           ;       while (!(SPSR & (1<<SPIF)));            // 等待传输结束 
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void SPI595Out(unsigned char i)  
 0006           ; 函数功能: 通过74HC595输出数据
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void SPI595Out(unsigned char i) 
 0006           ; {
 0006           ;       PORTB &= ~(1 << 4);                                     //准备锁存
 0006           ;       SPIMasterTransmit(i);
 0006           ;       PORTB |= (1 << 4);                                      //锁存数据
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void Timer1Init(void)
 0006           ; 函数功能: 定时器1初始化  256预分频 定时一秒 
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void Timer1Init(void)
 0006           ; {
 0006           ;       TCCR1B = 0x00;                            //关定时器
 0006           ;       TCNT1H = 0xF0;                            //设置定时初值
 0006           ;       TCNT1L = 0xBE;
 0006           ;       OCR1AH = 0x0F;
 0006           ;       OCR1AL = 0x42;
 0006           ;       OCR1BH = 0x0F;
 0006           ;       OCR1BL = 0x42;
 0006           ;       ICR1H  = 0x0F;
 0006           ;       ICR1L  = 0x42;
 0006           ;       TCCR1A = 0x00;
 0006           ;       TCCR1B = 0x04;                            //开始计数
 0006           ; }
 0006           ; 
 0006           ; #pragma interrupt_handler timer1_ovf_isr:9
 0006           ; void timer1_ovf_isr(void)
 0006           ; {
 0006           ;       TCNT1H = 0xF0;                            //重新装载计数值
 0006           ;       TCNT1L = 0xBE; 
 0006           ;       TimerCnt++;
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void InitDevices(void) 
 0006           ; 函数功能: 初始化各种信息
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void InitDevices(void)
 0006           ; {
 0006           ;       CLI();                                                          //关全部中断
 0006           ;       SPIMasterInit();                                        //SPI初始化为主机
 0006           ;       Timer1Init();
 0006           ; 
 0006           ;       TIMSK = 0x04;                                            //timer interrupt sources
 0006           ;       SEI();                                                           //开中断
 0006           ; }
 0006           ; 
 0006           ; void main(void) 
 0006           ; {
 0006           ;       uchar temp;
 0006           ;       DDRA = 0x00;                                            //方向输入
 0006           ;       PORTA = 0xFF;                                           //打开上拉
 0006           ;       DDRB = 0xFF;                                            //方向输出
 0006           ;       PORTB = 0xF0;                                           //电平设置
 0006           ;       DDRC = 0x00;
 0006           ;       PORTC = 0xFF;
 0006                   .dbline 137
 0006           ;       DDRD = 0xFF;
 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           ;       PORTD = 0xFF;
 0030           ;       InitDevices();
 0030           ;       while (1) 
 0030           ;       {
 0030           ;               if( TimerCnt > 9)
 0030           ;               {
 0030           ;                       if( TimerCnt > 99)
 0030           ;                       {
 0030           ;                               DDRB  = 0xff;
 0030           ;                               PORTB = 0xff;
 0030           ;                               temp  = TimerCnt / 100;
 0030           ;                               SPI595Out(disp[temp]);
 0030           ;                               PORTB = 0xfb;
 0030           ;                               DelayMs(1);
 0030           ;                               PORTB = 0xff;
 0030           ;                               temp  = TimerCnt%100/10;
 0030           ;                               SPI595Out(disp[temp]);
 0030           ;                               PORTB = 0xfd;
 0030           ;                               DelayMs(1);
 0030           ;                               PORTB = 0xff;
 0030           ;                               temp  = TimerCnt%10;
 0030           ;                               SPI595Out(disp[temp]);
 0030           ;                               PORTB = 0xfe;
 0030           ;                       }
 0030           ;                       else
 0030           ;                       {
 0030           ;                               DDRB  = 0xff;
 0030           ;                               PORTB = 0xff;
 0030           ;                               temp  = TimerCnt/10;
 0030                   .dbline 167
 0030           ;                               SPI595Out(disp[temp]);
 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           ;                               PORTB = 0xfd;
 004C           ;                               DelayMs(1);
 004C           ;                               PORTB = 0xff;
 004C           ;                               temp  = TimerCnt%10;
 004C           ;                               SPI595Out(disp[temp]);
 004C           ;                               PORTB = 0xfe;
 004C           ;                       }
 004C           ;               }
 004C           ;               else
 004C           ;               {
 004C           ;                       DDRB  = 0xff;
 004C           ;                       PORTB = 0xfe;
 004C           ;                       SPI595Out(disp[TimerCnt]);
 004C                   .dbline 182
 004C           ;               }
 004C           ;               DelayMs(1);
 004C 08EC              ldi R16,200
 004E           L4:
 004E                   .dbline 183
 004E           L5:
 004E                   .dbline 183
 004E           ;       }
 004E 202E              mov R2,R16
 0050 3324              clr R3
 0052 0150              subi R16,1
 0054 2220              tst R2
 0056 D9F7              brne L4
 0058                   .dbline -2
 0058           L3:
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbsym r i 16 c
 005A                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\..\ICC_H\SOFTWARE.h
 0000           _TimerCnt::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\..\ICC_H\SOFTWARE.h
 0001                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 0001                   .dbsym e TimerCnt _TimerCnt c
 0001           _disp::
 0001                   .blkb 2
                        .area idata
 0001 C0F9              .byte 192,249
                        .area data(ram, con, rel)
 0003                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 0003                   .blkb 2
                        .area idata
 0003 A4B0              .byte 164,176
                        .area data(ram, con, rel)
 0005                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 0005                   .blkb 2
                        .area idata
 0005 9992              .byte 153,146
                        .area data(ram, con, rel)
 0007                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 0007                   .blkb 2
                        .area idata
 0007 82F8              .byte 130,248
                        .area data(ram, con, rel)
 0009                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 0009                   .blkb 2
                        .area idata
 0009 8090              .byte 128,144
                        .area data(ram, con, rel)
 000B                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 000B                   .dbsym e disp _disp A[10:10]c
                        .area text(rom, con, rel)
 005A                   .dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
 005A                   .dbfunc e DelayMs _DelayMs fV
 005A           ;              j -> R20
 005A           ;              i -> R16
                        .even
 005A           _DelayMs::
 005A 0E940000          xcall push_gset1
 005E                   .dbline -1
 005E                   .dbline 29
 005E 06C0              xjmp L9
 0060           L8:
 0060                   .dbline 32
 0060                   .dbline 33
 0060 47EA              ldi R20,167
 0062           L11:
 0062                   .dbline 34
 0062           L12:
 0062                   .dbline 34
 0062 242E              mov R2,R20
 0064 3324              clr R3
 0066 4150              subi R20,1
 0068 2220              tst R2
 006A D9F7              brne L11
 006C                   .dbline 35
 006C           L9:
 006C                   .dbline 31
 006C 202E              mov R2,R16
 006E 3324              clr R3
 0070 0150              subi R16,1
 0072 2220              tst R2
 0074 A9F7              brne L8
 0076                   .dbline -2
 0076           L7:
 0076 0E940000          xcall pop_gset1
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbsym r j 20 c
 007C                   .dbsym r i 16 c
 007C                   .dbend
 007C                   .dbfunc e SPIMasterInit _SPIMasterInit fV
                        .even
 007C           _SPIMasterInit::
 007C                   .dbline -1
 007C                   .dbline 45
 007C                   .dbline 47

⌨️ 快捷键说明

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