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

📄 hard_i2c.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module Hard_I2C.c
                        .area data(ram, con, rel)
 0000           _BitTab::
 0000                   .blkb 2
                        .area idata
 0000 FEFD              .byte 254,253
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 FBF7              .byte 251,247
                        .area data(ram, con, rel)
 0004                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0004                   .dbsym e BitTab _BitTab A[4:4]c
 0004           _DispTab::
 0004                   .blkb 2
                        .area idata
 0004 3F06              .byte 63,6
                        .area data(ram, con, rel)
 0006                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0006                   .blkb 2
                        .area idata
 0006 5B4F              .byte 91,'O
                        .area data(ram, con, rel)
 0008                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0008                   .blkb 2
                        .area idata
 0008 666D              .byte 'f,'m
                        .area data(ram, con, rel)
 000A                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 000A                   .blkb 2
                        .area idata
 000A 7D07              .byte 125,7
                        .area data(ram, con, rel)
 000C                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 000C                   .blkb 2
                        .area idata
 000C 7F6F              .byte 127,'o
                        .area data(ram, con, rel)
 000E                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 000E                   .dbsym e DispTab _DispTab A[10:10]c
 000E           _DISP_DATA::
 000E                   .blkb 2
                        .area idata
 000E 0000              .byte 0,0
                        .area data(ram, con, rel)
 0010                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0010                   .blkb 2
                        .area idata
 0010 0000              .byte 0,0
                        .area data(ram, con, rel)
 0012                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0012                   .dbsym e DISP_DATA _DISP_DATA A[4:4]c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0000                   .dbfunc e Delay_us _Delay_us fV
 0000           ;           time -> R16,R17
                        .even
 0000           _Delay_us::
 0000                   .dbline -1
 0000                   .dbline 99
 0000           ; /****************************************Copyright (c)**************************************************
 0000           ; **                               ADEmbed Development Co.,LTD.                                    
 0000           ; **                                 http://www.adembed.com
 0000           ; **--------------File Info-------------------------------------------------------------------------------
 0000           ; ** File name:                 Hard_I2C.c
 0000           ; ** Last modified Date:  2008-12-13
 0000           ; ** Last Version:              1.0
 0000           ; ** Descriptions:              Hard_I2C Test.
 0000           ; ** 
 0000           ; **------------------------------------------------------------------------------------------------------
 0000           ; ** Created by:                        junbolu
 0000           ; ** Created date:              2008-12-13
 0000           ; ** Version:                           1.0
 0000           ; ** Descriptions:              
 0000           ; **
 0000           ; **------------------------------------------------------------------------------------------------------
 0000           ; ** Modified by:
 0000           ; ** Modified date:
 0000           ; ** Version:
 0000           ; ** Descriptions:
 0000           ; **
 0000           ; **------------------------------------------------------------------------------------------------------
 0000           ; **ICC-AVR application builder : 2008-12-13
 0000           ; **Target : M16
 0000           ; **Crystal: 7.3728Mhz
 0000           ; **PC0--->SCL          PC1--->SDA                        PD6--->Write_EN
 0000           ; **
 0000           ; **描述:按键K0被按下一次,数码管的最低位会加一,并存储在24C02中,下一次系统启动时,会读取此数据并显示。
 0000           ; **      此程序采用的硬件I2C方式完成的24C02的读写。
 0000           ; **
 0000           ; **涉及知识点:
 0000           ; **           硬件I2C
 0000           ; **           
 0000           ; **                    
 0000           ; *******************************************************************************************************/
 0000           ; 
 0000           ; #include<iom16v.h>
 0000           ; #include<macros.h>
 0000           ; #include"Define.h"
 0000           ; 
 0000           ; #define               fose                            7372800
 0000           ; 
 0000           ; #define     SCL                                 0
 0000           ; #define     SDA                                 1
 0000           ;  
 0000           ; #define       i2c_ddr                         DDRC
 0000           ; #define       i2c_port                        PORTC
 0000           ; #define       i2c_pin                         PINC      
 0000           ; 
 0000           ; #define       AT24C02_ADDR                                    0xA0  //EEPROM设备地址
 0000           ; //定义I2C的延迟参数
 0000           ; #define    DelayX     100                     //7.3M=>1;      8.4M=>2.建议5,因为将来的ClockCPU可以是16M
 0000           ; 
 0000           ; 
 0000           ; #define    SCL_1    {i2c_port|=1<<SCL;Delay_us(DelayX);}
 0000           ; #define    SCL_0    {i2c_port&=~(1<<SCL);Delay_us(DelayX);}
 0000           ; #define    SDA_1    {i2c_port|=1<<SDA;Delay_us(DelayX);}
 0000           ; #define    SDA_0    {i2c_port&=~(1<<SDA);Delay_us(DelayX);}
 0000           ; 
 0000           ; #define          Write_EN_DO        DDRD |= (1<<6);
 0000           ; #define          Write_EN_1         PORTD|= (1<<6);
 0000           ; #define          Write_EN_0         PORTD&=~(1<<6);
 0000           ; 
 0000           ; #define rd_device_add                  0xa1
 0000           ; #define wr_device_add                  0xa0
 0000           ; 
 0000           ; //TWI状态定义
 0000           ; //MT 主方式传输  MR 主方式接收 
 0000           ; #define START 0x08  
 0000           ; #define RE_START 0x10
 0000           ; #define MT_SLA_ACK 0x18
 0000           ; #define MT_SLA_NOACK 0x20
 0000           ; #define MT_DATA_ACK  0x28
 0000           ; #define MT_DATA_NOACK 0x30
 0000           ; #define MR_SLA_ACK  0x40
 0000           ; #define MR_SLA_NOACK 0x48
 0000           ; #define MR_DATA_ACK 0x50
 0000           ; #define MR_DATA_NOACK 0x58
 0000           ; //常用TWI操作(主模式写和主模式读)
 0000           ; #define Start()         (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
 0000           ; #define Stop()          (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
 0000           ; #define Wait()                  {while(!(TWCR&(1<<TWINT)));}     
 0000           ; #define TestAck()       (TWSR&0xf8)
 0000           ; #define SetAck()        (TWCR|=(1<<TWEA))
 0000           ; #define SetNoAck()    (TWCR&=~(1<<TWEA))
 0000           ; #define Twi()           (TWCR=(1<<TWINT)|(1<<TWEN))
 0000           ; #define Write8Bit(x)  {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
 0000           ; unsigned char DISP_NUM;                                                       //显示的位数
 0000           ; unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7}; //三位位选码
 0000           ; unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
 0000           ; unsigned char DISP_DATA[4]={0,0,0,0};             //显示的数字
 0000           ; 
 0000           ; void I2C_Ini(void);
 0000           ; unsigned char i2c_Write(unsigned char RomAddress,unsigned char Wdata);
 0000           ; unsigned char i2c_Read(unsigned char RomAddress);
 0000           ; 
 0000           ; 
 0000           ; void Delay_us(unsigned int time)
 0000           ; {
 0000           L2:
 0000                   .dbline 100
 0000           L3:
 0000                   .dbline 100
 0000           ; while(time--);
 0000 1801              movw R2,R16
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006 2220              tst R2
 0008 D9F7              brne L2
 000A 3320              tst R3
 000C C9F7              brne L2
 000E           X0:
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbsym r time 16 i
 0010                   .dbend
 0010                   .dbfunc e Delay_ms _Delay_ms fV
 0010           ;           time -> R20,R21
                        .even
 0010           _Delay_ms::
 0010 0E940000          xcall push_gset1
 0014 A801              movw R20,R16
 0016                   .dbline -1
 0016                   .dbline 104
 0016           ; }
 0016           ; 
 0016           ; void Delay_ms(unsigned int time)
 0016           ; {
 0016 03C0              xjmp L7
 0018           L6:
 0018                   .dbline 106
 0018                   .dbline 107
 0018 08EE              ldi R16,1000
 001A 13E0              ldi R17,3
 001C F1DF              xcall _Delay_us
 001E                   .dbline 108
 001E           L7:
 001E                   .dbline 105
 001E           ; while(time--)
 001E 1A01              movw R2,R20
 0020 4150              subi R20,1
 0022 5040              sbci R21,0
 0024 2220              tst R2
 0026 C1F7              brne L6
 0028 3320              tst R3
 002A B1F7              brne L6
 002C           X1:
 002C                   .dbline -2
 002C           L5:
 002C 0E940000          xcall pop_gset1
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r time 20 i
 0032                   .dbend
 0032                   .dbfunc e INT0_Init _INT0_Init fV
                        .even
 0032           _INT0_Init::
 0032                   .dbline -1
 0032                   .dbline 111
 0032           ;       {
 0032           ;       Delay_us(1000);
 0032           ;       }
 0032           ; }
 0032           ; void INT0_Init()
 0032           ; {
 0032                   .dbline 112
 0032           ;  GIFR |=0X40;              //清楚标志位
 0032 8AB7              in R24,0x3a
 0034 8064              ori R24,64
 0036 8ABF              out 0x3a,R24
 0038                   .dbline 114
 0038           ;  //MCUCR|=0X03;                          //上升沿触发中断     
 0038           ;  MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断   
 0038 85B7              in R24,0x35
 003A 8260              ori R24,2
 003C 85BF              out 0x35,R24
 003E                   .dbline 114
 003E 85B7              in R24,0x35
 0040 8E7F              andi R24,254
 0042 85BF              out 0x35,R24
 0044                   .dbline 115
 0044           ;  GICR |=0X40;                            //使能外部中断0
 0044 8BB7              in R24,0x3b
 0046 8064              ori R24,64
 0048 8BBF              out 0x3b,R24
 004A                   .dbline -2
 004A           L9:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C942600          jmp _int0_isr
                        .area text(rom, con, rel)
 004C                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 004C                   .dbfunc e int0_isr _int0_isr fV
                        .even
 004C           _int0_isr::
 004C 0E940000          xcall push_lset
 0050                   .dbline -1
 0050                   .dbline 120
 0050           ; }
 0050           ; 
 0050           ; #pragma interrupt_handler int0_isr:2
 0050           ; void int0_isr(void)
 0050           ; {
 0050                   .dbline 121
 0050           ;  DISP_DATA[3]++;
 0050 80911100          lds R24,_DISP_DATA+3
 0054 8F5F              subi R24,255    ; addi 1
 0056 80931100          sts _DISP_DATA+3,R24
 005A                   .dbline 122
 005A           ;  if(DISP_DATA[3]>9)
 005A 89E0              ldi R24,9
 005C 20901100          lds R2,_DISP_DATA+3
 0060 8215              cp R24,R2
 0062 18F4              brsh L12
 0064                   .dbline 123
 0064           ;      {
 0064                   .dbline 124
 0064           ;        DISP_DATA[3]=0;
 0064 2224              clr R2
 0066 20921100          sts _DISP_DATA+3,R2
 006A                   .dbline 125
 006A           ;        }
 006A           L12:
 006A                   .dbline 126
 006A           ;  Write_EN_0;
 006A 9698              cbi 0x12,6
 006C                   .dbline 126
 006C                   .dbline 127
 006C           ;  i2c_Write(0x02,DISP_DATA[3]);
 006C 20911100          lds R18,_DISP_DATA+3
 0070 02E0              ldi R16,2
 0072 53D0              xcall _i2c_Write
 0074                   .dbline 128
 0074           ;  Write_EN_1;
 0074 969A              sbi 0x12,6
 0076                   .dbline 128
 0076                   .dbline -2
 0076           L10:
 0076 0E940000          xcall pop_lset
 007A                   .dbline 0 ; func end
 007A 1895              reti
 007C                   .dbend
 007C                   .dbfunc e Display _Display fV
                        .even
 007C           _Display::
 007C                   .dbline -1
 007C                   .dbline 133
 007C                   .dbline 134
 007C 2224              clr R2
 007E 2BBA              out 0x1b,R2
 0080                   .dbline 135
 0080 80E0              ldi R24,<_BitTab

⌨️ 快捷键说明

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