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

📄 cymometer.lis

📁 AVR单片机例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                         .module cymometer.c
                         .area vector(rom, abs)
                         .org 14
 000E 93C0              rjmp _timer0
                         .org 6
 0006 D0C0              rjmp _timer1
                         .area code(ram, con, rel)
                         .area lit(rom, con, rel)
 0000                 _tabel::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
 000A 777C              .byte 'w,124
 000C 395E              .byte 57,94
 000E 7971              .byte 'y,'q
 0010                   .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
 0010                   .dbsym s tabel _tabel Ac[16:16]
                         .area data(ram, con, rel)
 0000                   .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
 0000                 _ledbuff::
 0000                   .blkb 2
                         .area idata
 0000 3F3F              .byte 63,63
                         .area data(ram, con, rel)
 0002                   .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
 0002                   .blkb 2
                         .area idata
 0002 3F3F              .byte 63,63
                         .area data(ram, con, rel)
 0004                   .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
 0004                   .blkb 2
                         .area idata
 0004 3F3F              .byte 63,63
                         .area data(ram, con, rel)
 0006                   .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
 0006                   .dbsym s ledbuff _ledbuff Ac[6:6]
                         .area text(rom, con, rel)
 0000                   .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
 0000                   .dbfunc s port_init _port_init fI
                         .even
 0000                 _port_init::
 0000                   .dbline 28{
                       ; /**********************************************
                       ;              http://www.sl.com.cn
                       ;       双龙电子公司----频率计演示程序(ICCAVR)
                       ;                  作者:詹卫前
                       ;           1、学习定时器T1捕捉(捕获)中断的使用
                       ;           2、学习频率计的设计方法
                       ;           3、通过对timecount的修改,可实现多量程
                       ;              频率计编程。
                       ; **********************************************/
                       ; #include <io8515.h>
                       ; #include <macros.h>
                       ; #pragma interrupt_handler timer0:8
                       ; #pragma interrupt_handler timer1:4
                       ; extern void delay_ms(unsigned int n);//引用外部函数
                       ; extern void delay_1ms(void); 
                       ; #pragma data:code
                       ;           /*   七段译码字形表     */        
                       ; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
                       ; #pragma data:data
                       ;           /*     显示缓冲区       */
                       ; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
                       ; unsigned long count;//频率测量计数变量
                       ; unsigned int timecount;//频率测量闸门控制变量
                       ; /******************************
                       ;            初始化
                       ; ******************************/
                       ; void port_init(void)
                       ;  {
 0000                   .dbline 29
                       ;   MCUCR=0x00;
 0000 2224              clr R2
 0002 25BE              out 0x35,R2
 0004                   .dbline 30
                       ;   DDRD=0x3f;
 0004 8FE3              ldi R24,63
 0006 81BB              out 0x11,R24
 0008                   .dbline 31
                       ;   DDRB=0xff;
 0008 8FEF              ldi R24,255
 000A 87BB              out 0x17,R24
 000C                   .dbline 32
                       ;   PORTD=0xff;
 000C 82BB              out 0x12,R24
 000E                   .dbline 33
                       ;   PORTB=0xff;
 000E 88BB              out 0x18,R24
 0010                   .dbline 34
                       ;   TIMSK=0x0a;//开放T0溢出中断和T1捕捉中断
 0010 8AE0              ldi R24,10
 0012 89BF              out 0x39,R24
 0014                   .dbline 35
                       ;   TCCR0=0x03;
 0014 83E0              ldi R24,3
 0016 83BF              out 0x33,R24
 0018                   .dbline 36
                       ;   TCCR1A=0x00;
 0018 2FBC              out 0x2f,R2
 001A                   .dbline 37
                       ;   TCCR1B=0xc0;
 001A 80EC              ldi R24,192
 001C 8EBD              out 0x2e,R24
 001E                   .dbline 38
                       ;   TCNT0=0x83;
 001E 83E8              ldi R24,131
 0020 82BF              out 0x32,R24
 0022                   .dbline 39
                       ;   timecount=1000;
 0022 88EE              ldi R24,1000
 0024 93E0              ldi R25,3
 0026 90930100          sts _timecount+1,R25
 002A 80930000          sts _timecount,R24
 002E                   .dbline 40}
                       ;  }
 002E                 L1:
 002E 0895              ret
 0030                   .dbfunc s display _display fI
                       ;              i -> R20
                         .even
 0030                 _display::
 0030 00D0              rcall push_gset1
 0032                   .dbline 45{
                       ; /******************************
                       ;      六路动态扫描显示电路
                       ; ******************************/ 
                       ; void display(void)
                       ; {
 0032                   .dbline 47
                       ;  unsigned char i;
                       ;  for (i=0;i<6;i++)
 0032 4427              clr R20
 0034 16C0              rjmp L6
 0036                 L3:
 0036                   .dbline 48
 0036                   .dbline 49
 0036 80E0              ldi R24,<_ledbuff
 0038 90E0              ldi R25,>_ledbuff
 003A E42F              mov R30,R20
 003C FF27              clr R31
 003E E80F              add R30,R24
 0040 F91F              adc R31,R25
 0042 2080              ldd R2,z+0
 0044 28BA              out 0x18,R2
 0046                   .dbline 50
 0046 01E0              ldi R16,1
 0048 142F              mov R17,R20
 004A 00D0              rcall lsl8
 004C 202E              mov R2,R16
 004E 2094              com R2
 0050 22BA              out 0x12,R2
 0052                   .dbline 51
 0052 00D0              rcall _delay_1ms
 0054                   .dbline 52
 0054 01E0              ldi R16,1
 0056 142F              mov R17,R20
 0058 00D0              rcall lsl8
 005A 22B2              in R2,0x12
 005C 202A              or R2,R16
 005E 22BA              out 0x12,R2
 0060                   .dbline 53
 0060                 L4:
 0060                   .dbline 47
 0060 4395              inc R20
 0062                 L6:
 0062                   .dbline 47
 0062 4630              cpi R20,6
 0064 40F3              brlo L3
 0066                   .dbline 54}
                       ;   {
                       ;    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
                       ;    PORTD=~(1<<i);   //开始显示
                       ;    delay_1ms();     //每一位显示保持一定时间
                       ;    PORTD|=(1<<i);   //关闭显示
                       ;   }
                       ; }
 0066                 L2:
 0066 00D0              rcall pop_gset1
 0068 0895              ret
 006A                   .dbsym r i 20 c
 006A                   .dbfunc s hextobcd _hextobcd fI
                       ;           temp -> R10
                       ;              i -> R12
                         .even
 006A                 _hextobcd::
 006A 00D0              rcall push_gset4
 006C                   .dbline 59{
                       ; /************************************
                       ;   将count十六进制数据转换为LED七段码
                       ; ************************************/
                       ; void hextobcd(void)
                       ; {
 006C                   .dbline 61
                       ;   unsigned char i,temp;
                       ;   for (i=0;i<6;i++)
 006C CC24              clr R12
 006E 42C0              rjmp L11
 0070                 L8:
 0070                   .dbline 62
 0070                   .dbline 62
 0070 00E0              ldi R16,<L12
 0072 10E0              ldi R17,>L12
 0074 00D0              rcall lpm32
 0076 50900500          lds R5,_count+2+1
 007A 40900400          lds R4,_count+2
 007E 30900300          lds R3,_count+1
 0082 20900200          lds R2,_count
 0086 3A93              st -y,R19
 0088 2A93              st -y,R18
 008A 1A93              st -y,R17
 008C 0A93              st -y,R16
 008E 022D              mov R16,R2
 0090 132D              mov R17,R3
 0092 242D              mov R18,R4
 0094 352D              mov R19,R5
 0096 00D0              rcall mod32u
 0098 A02E              mov R10,R16
 009A                   .dbline 63
 009A 80E0              ldi R24,<_tabel
 009C 90E0              ldi R25,>_tabel
 009E 2A2C              mov R2,R10
 00A0 3324              clr R3
 00A2 280E              add R2,R24
 00A4 391E              adc R3,R25
 00A6 E22D              mov R30,R2
 00A8 F32D              mov R31,R3
 00AA C895              lpm
 00AC 80E0              ldi R24,<_ledbuff
 00AE 90E0              ldi R25,>_ledbuff
 00B0 EC2D              mov R30,R12
 00B2 FF27              clr R31
 00B4 E80F              add R30,R24
 00B6 F91F              adc R31,R25
 00B8 0082              std z+0,R0
 00BA                   .dbline 64
 00BA 00E0              ldi R16,<L12
 00BC 10E0              ldi R17,>L12
 00BE 00D0              rcall lpm32

⌨️ 快捷键说明

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