📄 rfidsys.lst
字号:
0205 2700 CLR R16
0206 C01B RJMP 0x0222
(0330)
(0331) if( I2C_SendDat(wordAdr)==I2C_ERR )
0207 2F04 MOV R16,R20
0208 DFA0 RCALL _I2C_SendDat
0209 2300 TST R16
020A F411 BNE 0x020D
(0332) return I2C_ERR;
020B 2700 CLR R16
020C C015 RJMP 0x0222
(0333)
(0334) if( I2C_Restart()==I2C_ERR )
020D DF3E RCALL _I2C_Restart
020E 2300 TST R16
020F F411 BNE 0x0212
(0335) return I2C_ERR;
0210 2700 CLR R16
0211 C010 RJMP 0x0222
(0336)
(0337) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
0212 810C LDD R16,Y+4
0213 DF6D RCALL _I2C_SendRdDAdr
0214 2300 TST R16
0215 F411 BNE 0x0218
(0338) return I2C_ERR;
0216 2700 CLR R16
0217 C00A RJMP 0x0222
(0339)
(0340) if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
0218 810E LDD R16,Y+6
0219 811F LDD R17,Y+7
021A DF9C RCALL _I2C_RcvNAckDat
021B 2300 TST R16
021C F411 BNE 0x021F
(0341) return I2C_ERR;
021D 2700 CLR R16
021E C003 RJMP 0x0222
(0342)
(0343) I2C_Stop();
021F E984 LDI R24,0x94
0220 BF86 OUT 0x36,R24
(0344)
(0345) return I2C_CRR;
0221 E001 LDI R16,1
0222 940E064A CALL pop_gset2
0224 9508 RET
_I2C_Read_:
i --> R20
num --> R22
pRdDat --> R10
rdDAdr --> Y+8
wordAdr --> R20
wrDAdr --> R12
0225 940E0658 CALL push_gset4
0227 2F42 MOV R20,R18
0228 0168 MOVW R12,R16
0229 84AA LDD R10,Y+10
022A 84BB LDD R11,Y+11
022B 856C LDD R22,Y+12
(0346) }
(0347) /*--------------------------------------------------------------------
(0348) 函数名称:I2C读器件,读N个数据
(0349) 函数功能:
(0350) 注意事项:
(0351) 提示说明:
(0352) 输 入:wrDAdr: write device-address 写器件地址
(0353) wordAdr: word address 字地址
(0354) rdDAdr: read device-address 读器件地址
(0355) *pRdDat: p->read data 读取数据指针
(0356) num: number 读取数据个数
(0357) 返 回:
(0358) --------------------------------------------------------------------*/
(0359) bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
(0360) uint8 rdDAdr,uint8 *pRdDat,uint8 num)
(0361) {
(0362) uint8 i;
(0363)
(0364) if( I2C_Start()==I2C_ERR )
022C DF12 RCALL _I2C_Start
022D 2300 TST R16
022E F411 BNE 0x0231
(0365) return I2C_ERR;
022F 2700 CLR R16
0230 C033 RJMP 0x0264
(0366)
(0367) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
0231 0186 MOVW R16,R12
0232 DF34 RCALL _I2C_SendWrDAdr_
0233 2300 TST R16
0234 F411 BNE 0x0237
(0368) return I2C_ERR;
0235 2700 CLR R16
0236 C02D RJMP 0x0264
(0369)
(0370) if( I2C_SendDat(wordAdr)==I2C_ERR )
0237 2F04 MOV R16,R20
0238 DF70 RCALL _I2C_SendDat
0239 2300 TST R16
023A F411 BNE 0x023D
(0371) return I2C_ERR;
023B 2700 CLR R16
023C C027 RJMP 0x0264
(0372)
(0373) if( I2C_Restart()==I2C_ERR )
023D DF0E RCALL _I2C_Restart
023E 2300 TST R16
023F F411 BNE 0x0242
(0374) return I2C_ERR;
0240 2700 CLR R16
0241 C022 RJMP 0x0264
(0375)
(0376) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
0242 8508 LDD R16,Y+8
0243 DF3D RCALL _I2C_SendRdDAdr
0244 2300 TST R16
0245 F411 BNE 0x0248
(0377) return I2C_ERR;
0246 2700 CLR R16
0247 C01C RJMP 0x0264
(0378)
(0379) for(i=0;i<num-1;i++)
0248 2744 CLR R20
0249 C00A RJMP 0x0254
(0380) if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
024A 2F04 MOV R16,R20
024B 2711 CLR R17
024C 0D0A ADD R16,R10
024D 1D1B ADC R17,R11
024E DF78 RCALL _I2C_RcvAckDat
024F 2300 TST R16
0250 F411 BNE 0x0253
(0381) return I2C_ERR;
0251 2700 CLR R16
0252 C011 RJMP 0x0264
0253 9543 INC R20
0254 2F86 MOV R24,R22
0255 5081 SUBI R24,1
0256 1748 CP R20,R24
0257 F390 BCS 0x024A
(0382)
(0383) if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
0258 2F04 MOV R16,R20
0259 2711 CLR R17
025A 0D0A ADD R16,R10
025B 1D1B ADC R17,R11
025C DF5A RCALL _I2C_RcvNAckDat
025D 2300 TST R16
025E F411 BNE 0x0261
(0384) return I2C_ERR;
025F 2700 CLR R16
0260 C003 RJMP 0x0264
(0385)
(0386) I2C_Stop();
0261 E984 LDI R24,0x94
0262 BF86 OUT 0x36,R24
(0387)
(0388) return I2C_CRR;
0263 E001 LDI R16,1
0264 940E0650 CALL pop_gset4
0266 9508 RET
_delay50us:
j --> R20
t --> R16
0267 940E065E CALL push_gset1
FILE: D:\Headers\Hardware.H
(0001) /*********************************************************************
(0002)
(0003) 目 的: 建立AVR的硬件提取库,增加各类补丁,方便移植
(0004)
(0005) 目标系统: 基于AVR单片机
(0006)
(0007) 应用软件: ICCAVR
(0008)
(0009) 版 本: Version 1.0
(0010)
(0011) 圆版时间: 2008-05-28
(0012)
(0013) 开发人员: hky
(0014)
(0015) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0016)
(0017) *********************************************************************/
(0018)
(0019) /*01010101010101010101010101010101010101010101010101010101010101010101
(0020) ----------------------------------------------------------------------
(0021) 版本更新记录:
(0022)
(0023) ----------------------------------------------------------------------
(0024) 入口参数说明:
(0025)
(0026) ----------------------------------------------------------------------
(0027) 待定参数说明:
(0028)
(0029) ----------------------------------------------------------------------
(0030) 对外变量说明:
(0031)
(0032) ----------------------------------------------------------------------
(0033) 对外函数说明:
(0034)
(0035) ----------------------------------------------------------------------
(0036) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0037)
(0038) #ifndef Hardware_H
(0039) #define Hardware_H
(0040)
(0041) #include <math.h>
(0042) #include <string.h>
(0043) #include <stdio.h>
(0044) //#include <macros.h>
(0045) //#include <eeprom.h>
(0046) #include "D:\Headers\macros.h"
(0047) #include "D:\Headers\eeprom.h"
(0048) #include "D:\Headers\I2C.H"
(0049) //#include <wdt.h>
(0050)
(0051) /* TWI configs */
(0052) //如使用ATMEGA162(没有TWI接口)之类的MCU,在加载Hardware.H前,务必加“#define NO_INCLUDE_I2C_H 1”语句
(0053) #if NO_INCLUDE_I2C_H
(0054) ;
(0055) #else
(0056) #include "D:\Headers\I2C.H" //i2c即AVR的"twi"
(0057) #endif
(0058)
(0059) /* hard configs */
(0060) #ifndef flash
(0061) #define flash const
(0062) #endif
(0063)
(0064) #ifndef code
(0065) #define code const
(0066) #endif
(0067)
(0068) #ifndef NOP
(0069) #define NOP() asm("nop")
(0070) #endif
(0071)
(0072) /* io configs */
(0073) #define sbi(io,bit) ( io |= (1<<bit) ) //example: sbi(PORTA,0);sbi(DDRA,0);
(0074) #define cbi(io,bit) ( io &= ~(1<<bit) ) //example: cbi(PORTA,0);cbi(DDRA,0);
(0075) #define gbi(pin ,bit) ( pin & (1<<bit) ) //example: gbi(PINA,0);
(0076)
(0077) /* interrupt configs */
(0078) #define DIS_INT asm("sei")
(0079) #define EN_INT asm("cli")
(0080)
(0081) /* wdt configs */
(0082) #define WDT() asm("wdr")
(0083)
(0084) /* bit operation */
(0085) //#ifndef BIT
(0086) //#define BIT(x) ( 1<<(x) )
(0087) //#endif
(0088)
(0089) /* USART configs for 4 Mhz crystal */
(0090) //#define BAUD9600 25
(0091) //#define BAUD19000 12
(0092) //#define UART_TRAN_ON() UCR |= 0x08
(0093) //#define UART_TRAN_OFF() UCR &= ~0x08
(0094) //#define UART_RCV_ON() UCR |= 0x10
(0095) //#define UART_RCV_OFF() UCR &= ~0x10
(0096)
(0097) /*--------------------------------------------------------------------
(0098) 函数全称:50us 延时
(0099) 函数功能:当然是 50us延时 啦
(0100) 注意事项:基于7.3728M晶振,稍微有点误差
(0101) 提示说明:调用delay50us(20),得到1ms延时
(0102) 输 入:
(0103) 返 回:无
(0104) --------------------------------------------------------------------*/
(0105) void delay50us(sint16 t)
(0106) {
(0107) uint8 j;
(0108) for(;t>0;t--)
0269 C007 RJMP 0x0271
(0109) for(j=0;j<70;j++)
026A 2744 CLR R20
026B C001 RJMP 0x026D
026C 9543 INC R20
026D 3446 CPI R20,0x46
026E F3E8 BCS 0x026C
026F 5001 SUBI R16,1
0270 4010 SBCI R17,0
0271 2422 CLR R2
0272 2433 CLR R3
0273 1620 CP R2,R16
0274 0631 CPC R3,R17
0275 F3A4 BLT 0x026A
0276 940E0661 CALL pop_gset1
0278 9508 RET
_delay50ms:
i --> R20
t --> R16
0279 940E065E CALL push_gset1
(0110) ;
(0111) }
(0112) /*--------------------------------------------------------------------
(0113) 函数全称:50ms 延时
(0114) 函数功能:当然是 50ms延时 啦
(0115) 注意事项:基于7.3728M晶振,稍微有点误差
(0116) 提示说明:调用delay50ms(20),得到1s延时
(0117) 输 入:
(0118) 返 回:无
(0119) --------------------------------------------------------------------*/
(0120) void delay50ms(sint16 t)
(0121) {
(0122) uint16 i;
(0123) for(;t>0;t--)
027B C00B RJMP 0x0287
(0124) for(i=0;i<52642;i++)
027C 2744 CLR R20
027D 2755 CLR R21
027E C002 RJMP 0x0281
027F 5F4F SUBI R20,0xFF
0280 4F5F SBCI R21,0xFF
0281 3A42 CPI R20,0xA2
0282 ECED LDI R30,0xCD
0283 075E CPC R21,R30
0284 F3D0 BCS 0x027F
0285 5001 SUBI R16,1
0286 4010 SBCI R17,0
0287 2422 CLR R2
0288 2433 CLR R3
0289 1620 CP R2,R16
028A 0631 CPC R3,R17
028B F384 BLT 0x027C
028C 940E0661 CALL pop_gset1
028E 9508 RET
FILE: D:\Headers\LCD12864_ST7920.H
(0001) /*********************************************************************
(0002) 目 的: 建立LCD12864_ST7920的串模式操作库
(0003)
(0004) 目标系统: 基于AVR单片机
(0005)
(0006) 应用软件: ICCAVR
(0007)
(0008) 版 本: Version 1.0
(0009)
(0010) 圆版时间: 2008-05-28
(0011)
(0012) 开发人员: hky
(0013)
(0014) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0015)
(0016) *********************************************************************/
(0017)
(0018) /*01010101010101010101010101010101010101010101010101010101010101010101
(0019) ----------------------------------------------------------------------
(0020) 版本更新记录:
(0021)
(0022) ----------------------------------------------------------------------
(0023) 入口参数说明:
(0024) //#define OUT_LCD_CS sbi(DDRD,0)
(0025) //#define SET_LCD_CS sbi(PORTD,0)
(0026) //#define CLR_LCD_CS cbi(PORTD,0)
(0027)
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030)
(0031)
(0032) ----------------------------------------------------------------------
(0033) 对外变量说明:
(0034)
(0035) ----------------------------------------------------------------------
(0036) 对外函数说明:
(0037)
(0038) ----------------------------------------------------------------------
(0039) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0040)
(0041)
(0042) /*--------------------------------------------------------------------
(0043) 接口定义:
(0044)
(0045) LCD12864_ST7920 ATmega16
(0046) 1.GND -------- GND
(0047) 2.VCC -------- VCC
(0048) 3.V0 -------- V0
(0049) 4.RS(CS) -------- VCC
(0050) 5.R/W(SID) -------- MOSI/PB5
(0051) 6.E(SCLK) -------- SCK/PB7
(0052) 7.D0 -------- NC
(0053) 8.D1 -------- NC
(0054) 9.D2 -------- NC
(0055) 10.D3 -------- NC
(0056) 11.D4 -------- NC
(0057) 12.D5 -------- NC
(0058) 13.D6 -------- NC
(0059) 14.D7 -------- NC
(0060) 15.PSB -------- GND
(0061) 16.NC -------- NC
(0062) 17.RST -------- NC
(0063) 18.NC -------- NC
(0064) 19.LED+ -------- VCC
(0065) 20.LED- -------- GND
(0066)
(0067) 说明:
(0068) (1)使用ATmega16的硬件SPI操作LCD12864_ST7920
(0069) (2)PIN4/CS接VCC,其实也可接到特定的IO口,但外部程序需要指定
(0070) --------------------------------------------------------------------*/
(0071)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -