📄 ds12887.lis
字号:
.module DS12887.C
.area text(rom, con, rel)
0000 .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
0000 .dbfunc e Delayus _Delayus fV
0000 ; i -> R20,R21
0000 ; US -> R22,R23
.even
0000 _Delayus::
0000 0E940000 xcall push_gset2
0004 B801 movw R22,R16
0006 .dbline -1
0006 .dbline 36
0006 ; /*******************************************
0006 ; 文件:hongwai.C
0006 ; 环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
0006 ; 硬件:ATMEGA16芯片
0006 ; 日期:2008年12月10日
0006 ; 功能:红外遥控器数码管键值显示
0006 ; 备注:
0006 ; /******************************************/
0006 ; #include <D:\开发板\OK400C\程序\avr程序\OK400C.H>
0006 ; #include <stdio.h> //标准输入输出头文件
0006 ;
0006 ; /* 命令常量定义 */
0006 ; #define CMD_START_DS12C887 0x20
0006 ; /* 开启时钟芯片 */
0006 ; #define CMD_START_OSCILLATOR 0x70
0006 ; /* 开启振荡器,处于抑制状态 */
0006 ; #define CMD_CLOSE_DS12C887 0x30
0006 ; /* 关掉时钟芯片 */
0006 ; /* 所有的置位使用或操作,清除使用与操作 */
0006 ; #define MASK_SETB_SET 0x80
0006 ; /* 禁止刷新 */
0006 ; #define MASK_CLR_SET 0x7f
0006 ; /* 使能刷新 */
0006 ; #define MASK_SETB_DM 0x04
0006 ; /* 使用HEX格式 */
0006 ; #define MASK_CLR_DM 0xfb
0006 ; /* 使用BCD码格式 */
0006 ; #define MASK_SETB_2412 0x02
0006 ; /* 使用24小时模式 */
0006 ; #define MASK_CLR_2412 0xfd
0006 ; /* 使用12小时模式 */
0006 ; #define MASK_SETB_DSE 0x01
0006 ; /* 使用夏令时 */
0006 ; #define MASK_CLR_DSE 0xfe
0006 ; /* 不使用夏令时 */
0006 ;
0006 .dbline 38
0006 ; // 寄存器地址通道定义
0006 ; #define chSecondsChannel 0X00
0006 05E0 ldi R16,5
0008 10E0 ldi R17,0
000A 9B01 movw R18,R22
000C 0E940000 xcall empy16s
0010 B801 movw R22,R16
0012 7695 lsr R23
0014 6795 ror R22
0016 7695 lsr R23
0018 6795 ror R22
001A .dbline 39
001A 4427 clr R20
001C 5527 clr R21
001E 02C0 xjmp L5
0020 L2:
0020 .dbline 39
0020 L3:
0020 .dbline 39
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L5:
0024 .dbline 39
0024 ; #define chMinutesChannel 0X02
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D8F3 brlo L2
002A .dbline -2
002A .dbline 40
002A ; #define chHoursChannel 0X04
002A L1:
002A 0E940000 xcall pop_gset2
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r i 20 i
0030 .dbsym r US 22 i
0030 .dbend
0030 .dbfunc e Delayms _Delayms fV
0030 ; i -> R20,R21
0030 ; j -> R22,R23
0030 ; MS -> R16,R17
.even
0030 _Delayms::
0030 0E940000 xcall push_gset2
0034 .dbline -1
0034 .dbline 48
0034 ; #define chDofWChannel 0X06
0034 ; #define chDateChannel 0X07
0034 ; #define chMonthChannel 0X08
0034 ; #define chYearChannel 0X09
0034 ; #define chCenturyChannel 0X32
0034 ; #define chRegA 0X0a
0034 ; #define chRegB 0X0b
0034 ; #define chRegC 0X0c
0034 .dbline 50
0034 ; #define chRegD 0X0d
0034 ;
0034 4427 clr R20
0036 5527 clr R21
0038 0BC0 xjmp L10
003A L7:
003A .dbline 51
003A 6627 clr R22
003C 7727 clr R23
003E 02C0 xjmp L14
0040 L11:
0040 .dbline 51
0040 L12:
0040 .dbline 51
0040 6F5F subi R22,255 ; offset = 1
0042 7F4F sbci R23,255
0044 L14:
0044 .dbline 51
0044 6537 cpi R22,117
0046 E4E0 ldi R30,4
0048 7E07 cpc R23,R30
004A D0F3 brlo L11
004C L8:
004C .dbline 50
004C 4F5F subi R20,255 ; offset = 1
004E 5F4F sbci R21,255
0050 L10:
0050 .dbline 50
0050 4017 cp R20,R16
0052 5107 cpc R21,R17
0054 90F3 brlo L7
0056 .dbline -2
0056 .dbline 52
0056 ; uchar temp_data1[3] = {0x00,0x00,0x00};
0056 ; uchar temp_data2[3] = {0x00,0x00,0x00};
0056 L6:
0056 0E940000 xcall pop_gset2
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r i 20 i
005C .dbsym r j 22 i
005C .dbsym r MS 16 i
005C .dbend
005C .dbfunc e Board_init _Board_init fV
.even
005C _Board_init::
005C .dbline -1
005C .dbline 60
005C ; uchar display[6] = {0x00,0x00,0x00,0x00,0x00,0x00};
005C ; /*******************************************
005C ; 函数名称: LCD1602_portini
005C ; 功 能: 初始化1602液晶用到的IO口
005C ; 参 数: 无
005C ; 返回值 : 无
005C ; /********************************************/
005C ; void LCD1602_portini(void)
005C .dbline 61
005C ; {
005C 8FEF ldi R24,255
005E 8ABB out 0x1a,R24
0060 .dbline 62
0060 ; LCDa_CTRL_DDR |= BIT(LCDa_RS)|BIT(LCDa_RW)|BIT(LCDa_E);//配置控制管脚为输出
0060 87BB out 0x17,R24
0062 .dbline 63
0062 ; LCDa_DATA_DDR |= 0xFF;//配置数据管脚为输出
0062 84BB out 0x14,R24
0064 .dbline 64
0064 ; }
0064 81BB out 0x11,R24
0066 .dbline 66
0066 ; /*******************************************
0066 ; 函数名称: LCD1602_readbyte
0066 2224 clr R2
0068 2DB8 out 0xd,R2
006A .dbline 68
006A ; 功 能: 从1602液晶读出一个字节数据或者指令
006A ; 参 数: DatCmd--为iDat时是数据,为iCmd时是指令
006A AB9A sbi 0x15,3
006C .dbline 69
006C ; 返回值 : dByte--读回的数据或者指令
006C A998 cbi 0x15,1
006E .dbline 70
006E ; /********************************************/
006E D998 cbi 0x1b,1
0070 .dbline 71
0070 ; uchar LCD1602_readbyte(uchar DatCmd)
0070 88BB out 0x18,R24
0072 .dbline 72
0072 ; {
0072 DD9A sbi 0x1b,5
0074 .dbline 73
0074 ; uchar dByte;
0074 05E0 ldi R16,5
0076 10E0 ldi R17,0
0078 C3DF xcall _Delayus
007A .dbline 74
007A ; if (DatCmd == iCmd) //指令操作
007A DD98 cbi 0x1b,5
007C .dbline 76
007C ; LCDa_CLR_RS;
007C ; else
007C 2224 clr R2
007E 28BA out 0x18,R2
0080 .dbline 77
0080 ; LCDa_SET_RS;
0080 DE9A sbi 0x1b,6
0082 .dbline 78
0082 ;
0082 02E3 ldi R16,50
0084 10E0 ldi R17,0
0086 BCDF xcall _Delayus
0088 .dbline 79
0088 ; LCDa_SET_RW; //读操作
0088 DE98 cbi 0x1b,6
008A .dbline 81
008A ; LCDa_SET_E;
008A ; LCDa_DATA_DDR=0x00; //数据总线定义为输入
008A 8FEF ldi R24,255
008C 88BB out 0x18,R24
008E .dbline 82
008E ; dByte=LCDa_DI; //读数据或者指令
008E DF9A sbi 0x1b,7
0090 .dbline 83
0090 ; Delayms(1); //时序调整
0090 02E3 ldi R16,50
0092 10E0 ldi R17,0
0094 B5DF xcall _Delayus
0096 .dbline 84
0096 ; LCDa_CLR_E;
0096 DF98 cbi 0x1b,7
0098 .dbline 86
0098 ; LCDa_DATA_DDR|=0xff; //数据总线还原为输出
0098 ; return dByte;
0098 8FEF ldi R24,255
009A 82BB out 0x12,R24
009C .dbline 87
009C ; }
009C DF9A sbi 0x1b,7
009E .dbline 88
009E ; /*******************************************
009E 02E3 ldi R16,50
00A0 10E0 ldi R17,0
00A2 AEDF xcall _Delayus
00A4 .dbline 89
00A4 ; 函数名称: LCD1602_sendbyte
00A4 DF98 cbi 0x1b,7
00A6 .dbline -2
00A6 .dbline 92
00A6 ; 功 能: 向1602液晶写入一个字节数据或者指令
00A6 ; 参 数: DatCmd--为iDat时是数据,为iCmd时是指令
00A6 ; dByte--为写入1602的数据或者指令
00A6 L15:
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbend
.area data(ram, con, rel)
0000 .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
0000 _temp_data1::
0000 .blkb 2
.area idata
0000 0000 .byte 0,0
.area data(ram, con, rel)
0002 .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
0003 .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
0003 .dbsym e temp_data1 _temp_data1 A[3:3]c
0003 _temp_data2::
0003 .blkb 2
.area idata
0003 0000 .byte 0,0
.area data(ram, con, rel)
0005 .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
0005 .blkb 1
.area idata
0005 00 .byte 0
.area data(ram, con, rel)
0006 .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
0006 .dbsym e temp_data2 _temp_data2 A[3:3]c
0006 _display::
0006 .blkb 2
.area idata
0006 0000 .byte 0,0
.area data(ram, con, rel)
0008 .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
0008 .blkb 2
.area idata
0008 0000 .byte 0,0
.area data(ram, con, rel)
000A .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
000A .blkb 2
.area idata
000A 0000 .byte 0,0
.area data(ram, con, rel)
000C .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
000C .dbsym e display _display A[6:6]c
.area text(rom, con, rel)
00A8 .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
00A8 .dbfunc e LCD1602_portini _LCD1602_portini fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -