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

📄 main.lis

📁 AVRMega16单片机的项目
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _UartRecvIndex::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001           _gbRecvPCFrameCmd::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002           _I2cReceiveDataIndex::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003           _I2cReceiveDataLength::
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
 0004           _I2cSendDataIndex::
 0004                   .blkb 1
                        .area idata
 0004 00                .byte 0
                        .area data(ram, con, rel)
 0005           _I2cSendDataLength::
 0005                   .blkb 1
                        .area idata
 0005 00                .byte 0
                        .area data(ram, con, rel)
 0006           _gbi2cSendCmdStatus::
 0006                   .blkb 1
                        .area idata
 0006 01                .byte 1
                        .area data(ram, con, rel)
 0007           _gbi2cRecvByteStatus::
 0007                   .blkb 1
                        .area idata
 0007 00                .byte 0
                        .area data(ram, con, rel)
 0008           _gbi2cSendByteStatus::
 0008                   .blkb 1
                        .area idata
 0008 00                .byte 0
                        .area data(ram, con, rel)
 0009           _gTmr0OvrCount::
 0009                   .blkb 2
                        .area idata
 0009 0000              .word 0
                        .area data(ram, con, rel)
 000B           _gTmr2OvrCount::
 000B                   .blkb 2
                        .area idata
 000B 0000              .word 0
                        .area data(ram, con, rel)
 000D           _cKeyRiseEvent::
 000D                   .blkb 1
                        .area idata
 000D 00                .byte 0
                        .area data(ram, con, rel)
 000E           _gnCurrentFlashPage::
 000E                   .blkb 2
                        .area idata
 000E 0000              .word 0
                        .area data(ram, con, rel)
 0010           _gnCurrentBytesBlock::
 0010                   .blkb 2
                        .area idata
 0010 0000              .word 0
                        .area data(ram, con, rel)
 0012           _gnHistoryFlashPage::
 0012                   .blkb 2
                        .area idata
 0012 0000              .word 0
                        .area data(ram, con, rel)
 0014           _gnHistoryBytesBlock::
 0014                   .blkb 2
                        .area idata
 0014 0000              .word 0
                        .area data(ram, con, rel)
                        .area text(rom, con, rel)
                ;           loop -> R16,R17
                        .even
 0000           _SoftDelay::
 0000           ; /**********************************************************************************************************
 0000           ;   								 陕 西 立 方 电 子 有 限 公 司
 0000           ;   Copyright (C), 2000-2008, LiFang Tech. Co., Ltd.
 0000           ;   File name:      // main.c
 0000           ;   Author:zhuxz		Version:v3.1	Date: 2008-8-29
 0000           ;   Description:    // 用于详细说明此程序文件完成的主要功能,与其他模块
 0000           ;                   // 或函数的接口,输出值、取值范围、含义及参数间的控
 0000           ;                   // 制、顺序、独立或依赖等关系
 0000           ;   Others:         // 其它内容的说明
 0000           ; 	集成开发环境:ICCAVR6.31A	
 0000           ;   	主控芯片型号: ATMega16		
 0000           ;   	晶振频率:	  外部 7.3728MHZ	
 0000           ;   	波特率: 	  9600
 0000           ; **********************************************************************************************************/
 0000           ; 
 0000           ; #include <macros.h>
 0000           ; #include <string.h>
 0000           ; #include <stdlib.h>
 0000           ; #include <iom16v.h>
 0000           ; #include "main.h"
 0000           ; #include "initial.h"
 0000           ; #include "m500a.h"
 0000           ; 
 0000           ; 
 0000           ; #define TW_MR_SLA_ACK   0x40
 0000           ; #define TW_MR_SLA_NACK  0x48
 0000           ; #define TW_MR_DATA_ACK  0x50
 0000           ; #define TW_MR_DATA_NACK 0x58
 0000           ; #define TW_MTR_ARB_LOST 0x38
 0000           ; #define TW_MT_DATA_NACK 0x30
 0000           ; #define TW_MT_DATA_ACK  0x28
 0000           ; #define TW_MT_SLA_NACK  0x20
 0000           ; #define TW_MT_SLA_ACK   0x18
 0000           ; #define TW_REP_START    0x10
 0000           ; #define TW_START        0x08
 0000           ; 
 0000           ; /*******************************************************************************
 0000           ; *  AT45Db081数据存储格式:第1页记录当前已写入页号和字节数;
 0000           ; *  						 第2页到第21页未黑名单记录;
 0000           ; *  						 第22页开始为消费记录;
 0000           ; *					     其中,消费记录数据为4字节IC卡号+4字节余额+12字节时间,共20字节。		
 0000           ; *                        例如:2008年9月1日 14点40分30秒 刷卡剩余20.56元,字符串为:
 0000           ; *                        "t4s22056080901144030" 
 0000           ; *******************************************************************************/
 0000           ; /*******************************************************************************
 0000           ; *  串口通信格式格式:1>  要求上传消费记录命令格式为:"$000000000000$",共14个字节;
 0000           ; *                   2>  擦除芯片所有数据命令格式为:"@000000000000@",共14个字节;
 0000           ; *  					3>  设定时钟芯片的时间格式为:"%08090114403000%",共14个字节;
 0000           ; *                   4>  初始化芯片的命令格式为:"#000000000000#",共14个字节;
 0000           ; *  					5>	消费记录数据格式见AT45D081存储格式部分描述。
 0000           ; *                   6>  对应命令的回应信息格式为:成功-"$!"/"@!"/"%!",
 0000           ; *                                                失败-"$x"/"@x"/"%x"。
 0000           ; *                   7>  传输结束的信息格式为:"@#$%"。
 0000           ; *******************************************************************************/
 0000           ; #define  RECVBUFFERLEN  14
 0000           ; //UART接收到PC缓冲区的长度
 0000           ; uchar UartRecvBuffer[RECVBUFFERLEN];
 0000           ; //UART接收缓冲区的索引
 0000           ; uchar UartRecvIndex = 0;
 0000           ; //接收PC传来的UART完整一桢数据包标志
 0000           ; uchar  gbRecvPCFrameCmd  = 0;
 0000           ; 
 0000           ; 
 0000           ; //MFRC500芯片的串号
 0000           ; uchar Snr_RC500[4];
 0000           ; 
 0000           ; 
 0000           ; //定义I2C总线的数据
 0000           ; //MCU I2C接收数据的缓存参数定义
 0000           ; uchar  I2cReceiveDataIndex = 0;
 0000           ; uchar  I2cReceiveDataLength= 0;
 0000           ; uchar  I2cReceiveData[16];
 0000           ; //MCU I2C发送数据的缓存参数定义
 0000           ; uchar  I2cSendData[16];
 0000           ; uchar  I2cSendDataIndex    = 0;
 0000           ; uchar  I2cSendDataLength   = 0;
 0000           ; 
 0000           ; //表明与I2C器件的通信状态(成功:TRUE/失败:FALSE)
 0000           ; uchar  gbi2cSendCmdStatus  = TRUE;
 0000           ; //MCU接收到I2C器件字节标志
 0000           ; uchar  gbi2cRecvByteStatus = FALSE;
 0000           ; //MCU发送出字节标志
 0000           ; uchar  gbi2cSendByteStatus = FALSE;
 0000           ; 
 0000           ; //Timer0溢出次数,用来控制刷卡时间
 0000           ; uint   gTmr0OvrCount     = 0;
 0000           ; //Timer2溢出次数,用来控制流水时间
 0000           ; uint   gTmr2OvrCount     = 0;
 0000           ; 
 0000           ; //键盘中断标志
 0000           ; uchar  cKeyRiseEvent     = 0;
 0000           ; 
 0000           ; 
 0000           ; //FLASH地址操作的变量
 0000           ; uint  gnCurrentFlashPage = 0;	//当前操作的页地址
 0000           ; uint  gnCurrentBytesBlock = 0;   //当前页内的字节块
 0000           ; 
 0000           ; uint  gnHistoryFlashPage = 0;	//历史操作的页地址
 0000           ; uint  gnHistoryBytesBlock = 0;   //历史页内的字节块
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; //Timer2定时产生间隔来读取M41T0器件的当前时间
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; void  SoftDelay(void)
 0000           ; {
 0000           ;      uint loop = 0;
 0000 0027              clr R16
 0002 1127              clr R17
 0004 02C0              xjmp L5
 0006           L2:
 0006           L3:
 0006 0F5F              subi R16,255  ; offset = 1
 0008 1F4F              sbci R17,255
 000A           L5:
 000A           ; 	 
 000A           ;      for (loop = 0; loop <1000; loop++);     
 000A 083E              cpi R16,232
 000C E3E0              ldi R30,3
 000E 1E07              cpc R17,R30
 0010 D0F3              brlo L2
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014           ;       senddata -> R16
                        .even
 0014           _Uart_Send::
 0014           ; }
 0014           ; 
 0014           ; /*******************************************************************************
 0014           ; **             串口发送字节子程序 
 0014           ; *******************************************************************************/ 
 0014           ; void Uart_Send(uchar senddata) 
 0014           ; { 
 0014           ;     UDR = senddata;
 0014 0CB9              out 0xc,R16
 0016           L7:
 0016           L8:
 0016           ; 	
 0016           ;     while(!(UCSRA & (1<<UDRE)));  //等待发送完
 0016 5D9B              sbis 0xb,5
 0018 FECF              rjmp L7
 001A           ;       
 001A           ;     UCSRA |= 0x40;                //清“发送完”标志位 
 001A 5E9A              sbi 0xb,6
 001C           L6:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E           ;          cData -> R16
                        .even
 001E           _SPI_MasterTransmit::
 001E           ; }
 001E           ; 
 001E           ; 
 001E           ; /******************************************************************************* 
 001E           ; **             SPI发送字节子程序 
 001E           ; *******************************************************************************/
 001E           ; void SPI_MasterTransmit(uchar cData)
 001E           ; { 
 001E           ; 	 /* 启动数据传输 */
 001E           ; 	 SPDR = cData;
 001E 0FB9              out 0xf,R16
 0020           L11:
 0020           L12:
 0020           ; 	 /* 等待传输结束 */
 0020           ; 	 while(!(SPSR & (1<<SPIF)));
 0020 779B              sbis 0xe,7
 0022 FECF              rjmp L11
 0024           L10:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026           ;          cData -> R20
 0026           ;       byteAddr -> R22,R23
 0026           ;           page -> R10,R11
                        .even
 0026           _SPI_ReadPageCtx::
 0026 0E940000          xcall push_gset3
 002A B901              movw R22,R18
 002C 5801              movw R10,R16
 002E           ; }
 002E           ; 
 002E           ; //读取某页内字节地址的命令
 002E           ; uchar  SPI_ReadPageCtx(uint page/*0~4095*/, uint byteAddr/*0~263*/)
 002E           ; {
 002E           ;      uchar cData=0;
 002E 4427              clr R20
 0030           ;        
 0030           ;        CLRBIT(PORTB,4);
 0030 C498              cbi 0x18,4
 0032           ;        
 0032           ;      SPI_MasterTransmit(0x52); //CMD, 1st
 0032 02E5              ldi R16,82
 0034 F4DF              xcall _SPI_MasterTransmit
 0036           ;      
 0036           ;        cData = 0x1F & ((char)(page>>7));
 0036 27E0              ldi R18,7
 0038 30E0              ldi R19,0
 003A 8501              movw R16,R10
 003C 0E940000          xcall lsr16
 0040 402F              mov R20,R16
 0042 4F71              andi R20,31
 0044           ;        SPI_MasterTransmit(cData);//Page Addr High,2nd
 0044 042F              mov R16,R20
 0046 EBDF              xcall _SPI_MasterTransmit
 0048           ;        
 0048           ;        cData = ((char)(page & 0x7F))<<1;
 0048 4A2D              mov R20,R10
 004A 4F77              andi R20,127
 004C 5070              andi R21,0
 004E 440F              lsl R20
 0050           ;        cData |= (char)((byteAddr & 0x1FF)>>8);
 0050 CB01              movw R24,R22
 0052 9170              andi R25,1
 0054 892F              mov R24,R25
 0056 9927              clr R25
 0058 482B              or R20,R24
 005A           ;        SPI_MasterTransmit(cData);//Page Addr low,3rd
 005A 042F              mov R16,R20
 005C E0DF              xcall _SPI_MasterTransmit
 005E           ;        
 005E           ;        cData = (char)(byteAddr & 0xFF);

⌨️ 快捷键说明

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