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

📄 1602_8563.lis

📁 avr单片机的程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module _1602_8563.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\PCF8563\1602_time\timer_io.h
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 28
 0000           ; /*************************************
 0000           ; *         PCF8563时钟程序                      *
 0000           ; * 文 件 名:1602_8563.c                                *
 0000           ; * 建立日期:2007年07月04日                     *
 0000           ; * 设    计:铜河                                       *
 0000           ; * 修改日期:2007年07月08日                     *
 0000           ; * 版    本:V22.02                                     *
 0000           ; * 主控芯片:Mega16L                                    *
 0000           ; * 工作频率:7.3728MHz                          *
 0000           ; *************************************/
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; #include <D:\PCF8563\1602_time\timer_io.h>
 0000           ; #include <D:\PCF8563\1602_time\delay.h>
 0000           ; #include <D:\PCF8563\1602_time\lcd1602_4h.h>
 0000           ; #include <D:\PCF8563\1602_time\TWI_8563.h>
 0000           ; 
 0000           ; //数据简化宏定义
 0000           ; #define uchar unsigned char
 0000           ; #define uint unsigned int
 0000           ; 
 0000           ; //全局变量定义
 0000           ; uchar timer[8];                                                //时钟数据
 0000           ; 
 0000           ; /**********************************
 0000           ; *         蜂鸣器发声函数                *
 0000           ; * 函数功能:蜂鸣器发出声响              *
 0000                   .dbline 29
 0000           ; * 入    口:n 声次数                    *
 0000 8FEF              ldi R24,255
 0002 8ABB              out 0x1a,R24
 0004                   .dbline 30
 0004           ; *                     i 声时长,i*10ms          *
 0004 2224              clr R2
 0006 2BBA              out 0x1b,R2
 0008                   .dbline 31
 0008           ; * 返    回:无                                          *
 0008 88E0              ldi R24,8
 000A 87BB              out 0x17,R24
 000C                   .dbline 32
 000C           ; * 发声频率:固定1KHz 无源               *
 000C 28BA              out 0x18,R2
 000E                   .dbline 33
 000E           ; **********************************/
 000E 24BA              out 0x14,R2
 0010                   .dbline 34
 0010           ; void spk(uchar i,uchar n)
 0010 8FEF              ldi R24,255
 0012 85BB              out 0x15,R24
 0014                   .dbline 35
 0014           ;     {
 0014 80EF              ldi R24,240
 0016 81BB              out 0x11,R24
 0018                   .dbline 36
 0018           ;       uint a;
 0018 8FE0              ldi R24,15
 001A 82BB              out 0x12,R24
 001C                   .dbline -2
 001C           L1:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfile D:\PCF8563\1602_time\delay.h
 001E                   .dbfunc e delay_us _delay_us fV
 001E           ;              i -> R16,R17
                        .even
 001E           _delay_us::
 001E                   .dbline -1
 001E                   .dbline 15
 001E 05C0              xjmp L4
 0020           L3:
 0020                   .dbline 17
 0020                   .dbline 18
 0020 0150              subi R16,1
 0022 1040              sbci R17,0
 0024                   .dbline 19
 0024 0000              nop
 0026                   .dbline 20
 0026 0000              nop
 0028                   .dbline 21
 0028 0000              nop
 002A                   .dbline 22
 002A           L4:
 002A                   .dbline 16
 002A 0030              cpi R16,0
 002C 0107              cpc R16,R17
 002E C1F7              brne L3
 0030           X0:
 0030                   .dbline -2
 0030           L2:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r i 16 i
 0032                   .dbend
 0032                   .dbfunc e delay_ms _delay_ms fV
 0032           ;              a -> R20,R21
 0032           ;              i -> R16,R17
                        .even
 0032           _delay_ms::
 0032 0E940000          xcall push_gset1
 0036                   .dbline -1
 0036                   .dbline 32
 0036                   .dbline 34
 0036 0AC0              xjmp L10
 0038           L7:
 0038                   .dbline 35
 0038                   .dbline 36
 0038 47E7              ldi R20,1143
 003A 54E0              ldi R21,4
 003C 02C0              xjmp L14
 003E           L11:
 003E                   .dbline 37
 003E                   .dbline 37
 003E                   .dbline 37
 003E           L12:
 003E                   .dbline 36
 003E 4150              subi R20,1
 0040 5040              sbci R21,0
 0042           L14:
 0042                   .dbline 36
 0042 4030              cpi R20,0
 0044 4507              cpc R20,R21
 0046 D9F7              brne L11
 0048           X1:
 0048                   .dbline 38
 0048           L8:
 0048                   .dbline 34
 0048 0150              subi R16,1
 004A 1040              sbci R17,0
 004C           L10:
 004C                   .dbline 34
 004C 0030              cpi R16,0
 004E 0107              cpc R16,R17
 0050 99F7              brne L7
 0052           X2:
 0052                   .dbline -2
 0052           L6:
 0052 0E940000          xcall pop_gset1
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbsym r a 20 i
 0058                   .dbsym r i 16 i
 0058                   .dbend
 0058                   .dbfile D:\PCF8563\1602_time\lcd1602_4h.h
 0058                   .dbfunc e lcd_da _lcd_da fV
 0058           ;              a -> R20
 0058           ;           data -> R22
                        .even
 0058           _lcd_da::
 0058 0E940000          xcall push_gset2
 005C 602F              mov R22,R16
 005E                   .dbline -1
 005E                   .dbline 33
 005E                   .dbline 35
 005E DA9A              sbi 0x1b,2
 0060                   .dbline 36
 0060 DB9A              sbi 0x1b,3
 0062                   .dbline 37
 0062           ;       for(;n;n--)
 0062 462F              mov R20,R22
 0064 4F60              ori R20,15
 0066                   .dbline 38
 0066           ;           {
 0066 8BB3              in R24,0x1b
 0068 806F              ori R24,240
 006A 8423              and R24,R20
 006C 8BBB              out 0x1b,R24
 006E                   .dbline 39
 006E           ;               a=i*10;                                //计算每声响的长度:MS
 006E 02E3              ldi R16,50
 0070 10E0              ldi R17,0
 0072 D5DF              xcall _delay_us
 0074                   .dbline 40
 0074           ;               for(;a;a--)
 0074 DB98              cbi 0x1b,3
 0076                   .dbline 41
 0076           ;                   {
 0076 01E0              ldi R16,1
 0078 10E0              ldi R17,0
 007A DBDF              xcall _delay_ms
 007C                   .dbline 43
 007C           ;                       delay_us(500);             //响声频率为1KHZ
 007C           ;                       SPK_TG;
 007C DB9A              sbi 0x1b,3
 007E                   .dbline 44
 007E           ;                       delay_us(500);
 007E 462F              mov R20,R22
 0080 4F70              andi R20,#0x0F
 0082 4295              swap R20
 0084 4F60              ori R20,15
 0086                   .dbline 45
 0086           ;                       SPK_TG;
 0086 8BB3              in R24,0x1b
 0088 806F              ori R24,240
 008A 8423              and R24,R20
 008C 8BBB              out 0x1b,R24
 008E                   .dbline 46
 008E           ;                       }
 008E 02E3              ldi R16,50
 0090 10E0              ldi R17,0
 0092 C5DF              xcall _delay_us
 0094                   .dbline 47
 0094           ;               SPK_OFF;                                   //响完关闭蜂鸣器
 0094 DB98              cbi 0x1b,3
 0096                   .dbline 48
 0096           ;               delay_ms(100);                     //每声响之间隔100MS
 0096 01E0              ldi R16,1
 0098 10E0              ldi R17,0
 009A CBDF              xcall _delay_ms
 009C                   .dbline -2
 009C           L15:
 009C 0E940000          xcall pop_gset2
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbsym r a 20 c
 00A2                   .dbsym r data 22 c
 00A2                   .dbend
 00A2                   .dbfunc e lcd_comm _lcd_comm fV
 00A2           ;              a -> R20
 00A2           ;           data -> R22
                        .even
 00A2           _lcd_comm::
 00A2 0E940000          xcall push_gset2
 00A6 602F              mov R22,R16
 00A8                   .dbline -1
 00A8                   .dbline 53
 00A8           ;               }
 00A8           ;       }
 00A8           ; 
 00A8           ; /**********************************
 00A8           ; *          读出数据函数                         *
 00A8                   .dbline 55
 00A8           ; **********************************/
 00A8           ; uchar read_timer(void)
 00A8 DA98              cbi 0x1b,2
 00AA                   .dbline 56
 00AA           ;     {
 00AA DB9A              sbi 0x1b,3
 00AC                   .dbline 57
 00AC           ;       start();                                          //启动总线
 00AC 462F              mov R20,R22
 00AE 4F60              ori R20,15
 00B0                   .dbline 58
 00B0           ;       waitack();                                                //等待启动完成
 00B0 8BB3              in R24,0x1b
 00B2 806F              ori R24,240
 00B4 8423              and R24,R20
 00B6 8BBB              out 0x1b,R24
 00B8                   .dbline 59
 00B8           ;       if(chkack()!=START)return I2C_ERR;                //检查是否启动成功
 00B8 02E3              ldi R16,50
 00BA 10E0              ldi R17,0
 00BC B0DF              xcall _delay_us
 00BE                   .dbline 60
 00BE           ;       write_tim(SLA_W);                                 //发送写地址
 00BE DB98              cbi 0x1b,3
 00C0                   .dbline 61
 00C0           ;       write_tim(0x02);                                  //写数据地址
 00C0 01E0              ldi R16,1
 00C2 10E0              ldi R17,0
 00C4 B6DF              xcall _delay_ms
 00C6                   .dbline 63
 00C6           ;       
 00C6           ;       start();
 00C6 DB9A              sbi 0x1b,3
 00C8                   .dbline 64
 00C8           ;       waitack();                                                //等待启动完成
 00C8 462F              mov R20,R22
 00CA 4F70              andi R20,#0x0F
 00CC 4295              swap R20
 00CE 4F60              ori R20,15
 00D0                   .dbline 65
 00D0           ;       if(chkack()!=RESTART)return I2C_ERR;      //检查是否启动成功
 00D0 8BB3              in R24,0x1b
 00D2 806F              ori R24,240
 00D4 8423              and R24,R20
 00D6 8BBB              out 0x1b,R24
 00D8                   .dbline 66
 00D8           ;       write_tim(SLA_R);                                 //发送读地址
 00D8 02E3              ldi R16,50
 00DA 10E0              ldi R17,0
 00DC A0DF              xcall _delay_us
 00DE                   .dbline 67
 00DE           ;       
 00DE DB98              cbi 0x1b,3
 00E0                   .dbline 68
 00E0           ;       timer[0]=read_tim()&0x7F;                 //读出秒数据
 00E0 01E0              ldi R16,1
 00E2 10E0              ldi R17,0
 00E4 A6DF              xcall _delay_ms
 00E6                   .dbline -2
 00E6           L16:
 00E6 0E940000          xcall pop_gset2
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbsym r a 20 c
 00EC                   .dbsym r data 22 c
 00EC                   .dbend
 00EC                   .dbfunc e lcd_comm_b _lcd_comm_b fV
 00EC           ;              a -> R20
 00EC           ;           data -> R20
                        .even
 00EC           _lcd_comm_b::
 00EC 0E940000          xcall push_gset1
 00F0 402F              mov R20,R16
 00F2                   .dbline -1
 00F2                   .dbline 73
 00F2           ;       timer[1]=read_tim()&0x7F;                 //读出分数据
 00F2           ;       timer[2]=read_tim()&0x3F;                 //读出时数据
 00F2           ;       timer[3]=read_tim()&0x3F;                 //读出日数据
 00F2           ;       timer[4]=read_tim()&0x07;                 //读出周数据
 00F2           ;          if(timer[4]==0)timer[4]=7;
 00F2                   .dbline 75
 00F2           ;       timer[5]=read_tim();                      //读出月数据

⌨️ 快捷键说明

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