📄 queryad.lst
字号:
(0307) // uint8 *pWrDat,uint8 num)
(0308) //{
(0309) //
(0310) //}
(0311) /*--------------------------------------------------------------------
(0312) 函数名称:I2C读器件,读一个数据
(0313) 函数功能:
(0314) 注意事项:
(0315) 提示说明:
(0316) 输 入:wrDAdr: write device-address 写器件地址
(0317) wordAdr: word address 字地址
(0318) rdDAdr: read device-address 读器件地址
(0319) *pRdDat: p->read data 读取数据指针
(0320) 返 回:
(0321) --------------------------------------------------------------------*/
(0322) bool I2C_Read(uint16 wrDAdr,uint8 wordAdr,
(0323) uint8 rdDAdr,uint8 *pRdDat)
(0324) {
(0325) if( I2C_Start()==I2C_ERR )
016B DF42 RCALL _I2C_Start
016C 2300 TST R16
016D F411 BNE 0x0170
(0326) return I2C_ERR;
016E 2700 CLR R16
016F C021 RJMP 0x0191
(0327)
(0328) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
0170 018B MOVW R16,R22
0171 DF64 RCALL _I2C_SendWrDAdr_
0172 2300 TST R16
0173 F411 BNE 0x0176
(0329) return I2C_ERR;
0174 2700 CLR R16
0175 C01B RJMP 0x0191
(0330)
(0331) if( I2C_SendDat(wordAdr)==I2C_ERR )
0176 2F04 MOV R16,R20
0177 DFA0 RCALL _I2C_SendDat
0178 2300 TST R16
0179 F411 BNE 0x017C
(0332) return I2C_ERR;
017A 2700 CLR R16
017B C015 RJMP 0x0191
(0333)
(0334) if( I2C_Restart()==I2C_ERR )
017C DF3E RCALL _I2C_Restart
017D 2300 TST R16
017E F411 BNE 0x0181
(0335) return I2C_ERR;
017F 2700 CLR R16
0180 C010 RJMP 0x0191
(0336)
(0337) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
0181 810C LDD R16,Y+4
0182 DF6D RCALL _I2C_SendRdDAdr
0183 2300 TST R16
0184 F411 BNE 0x0187
(0338) return I2C_ERR;
0185 2700 CLR R16
0186 C00A RJMP 0x0191
(0339)
(0340) if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
0187 810E LDD R16,Y+6
0188 811F LDD R17,Y+7
0189 DF9C RCALL _I2C_RcvNAckDat
018A 2300 TST R16
018B F411 BNE 0x018E
(0341) return I2C_ERR;
018C 2700 CLR R16
018D C003 RJMP 0x0191
(0342)
(0343) I2C_Stop();
018E E984 LDI R24,0x94
018F BF86 OUT 0x36,R24
(0344)
(0345) return I2C_CRR;
0190 E001 LDI R16,1
0191 940E02D9 CALL pop_gset2
0193 9508 RET
_I2C_Read_:
i --> R20
num --> R22
pRdDat --> R10
rdDAdr --> Y+8
wordAdr --> R20
wrDAdr --> R12
0194 940E02E1 CALL push_gset4
0196 2F42 MOV R20,R18
0197 0168 MOVW R12,R16
0198 84AA LDD R10,Y+10
0199 84BB LDD R11,Y+11
019A 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 )
019B DF12 RCALL _I2C_Start
019C 2300 TST R16
019D F411 BNE 0x01A0
(0365) return I2C_ERR;
019E 2700 CLR R16
019F C033 RJMP 0x01D3
(0366)
(0367) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
01A0 0186 MOVW R16,R12
01A1 DF34 RCALL _I2C_SendWrDAdr_
01A2 2300 TST R16
01A3 F411 BNE 0x01A6
(0368) return I2C_ERR;
01A4 2700 CLR R16
01A5 C02D RJMP 0x01D3
(0369)
(0370) if( I2C_SendDat(wordAdr)==I2C_ERR )
01A6 2F04 MOV R16,R20
01A7 DF70 RCALL _I2C_SendDat
01A8 2300 TST R16
01A9 F411 BNE 0x01AC
(0371) return I2C_ERR;
01AA 2700 CLR R16
01AB C027 RJMP 0x01D3
(0372)
(0373) if( I2C_Restart()==I2C_ERR )
01AC DF0E RCALL _I2C_Restart
01AD 2300 TST R16
01AE F411 BNE 0x01B1
(0374) return I2C_ERR;
01AF 2700 CLR R16
01B0 C022 RJMP 0x01D3
(0375)
(0376) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
01B1 8508 LDD R16,Y+8
01B2 DF3D RCALL _I2C_SendRdDAdr
01B3 2300 TST R16
01B4 F411 BNE 0x01B7
(0377) return I2C_ERR;
01B5 2700 CLR R16
01B6 C01C RJMP 0x01D3
(0378)
(0379) for(i=0;i<num-1;i++)
01B7 2744 CLR R20
01B8 C00A RJMP 0x01C3
(0380) if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
01B9 2F04 MOV R16,R20
01BA 2711 CLR R17
01BB 0D0A ADD R16,R10
01BC 1D1B ADC R17,R11
01BD DF78 RCALL _I2C_RcvAckDat
01BE 2300 TST R16
01BF F411 BNE 0x01C2
(0381) return I2C_ERR;
01C0 2700 CLR R16
01C1 C011 RJMP 0x01D3
01C2 9543 INC R20
01C3 2F86 MOV R24,R22
01C4 5081 SUBI R24,1
01C5 1748 CP R20,R24
01C6 F390 BCS 0x01B9
(0382)
(0383) if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
01C7 2F04 MOV R16,R20
01C8 2711 CLR R17
01C9 0D0A ADD R16,R10
01CA 1D1B ADC R17,R11
01CB DF5A RCALL _I2C_RcvNAckDat
01CC 2300 TST R16
01CD F411 BNE 0x01D0
(0384) return I2C_ERR;
01CE 2700 CLR R16
01CF C003 RJMP 0x01D3
(0385)
(0386) I2C_Stop();
01D0 E984 LDI R24,0x94
01D1 BF86 OUT 0x36,R24
(0387)
(0388) return I2C_CRR;
01D2 E001 LDI R16,1
01D3 940E02DC CALL pop_gset4
01D5 9508 RET
_delay50us:
j --> R20
t --> R16
01D6 940E02E7 CALL push_gset1
FILE: D:\ICC_H\Hardware.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立AVR的硬件提取库,增加各类补丁,方便移植
(0005)
(0006) 目标系统: 基于AVR单片机
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-06-25
(0013)
(0014) 开发人员: SEE
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024)
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027)
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030)
(0031) ----------------------------------------------------------------------
(0032) 对外变量说明:
(0033)
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039)
(0040) #ifndef Hardware_H
(0041) #define Hardware_H
(0042)
(0043) #include <math.h>
(0044) #include <string.h>
(0045) #include <stdio.h>
(0046) #include <macros.h>
(0047) #include <eeprom.h>
(0048) //#include <wdt.h>
(0049)
(0050) /* TWI configs */
(0051) //如使用ATMEGA162(没有TWI接口)之类的MCU,在加载Hardware.H前,务必加“#define NO_INCLUDE_I2C_H 1”语句
(0052) #if NO_INCLUDE_I2C_H
(0053) ;
(0054) #else
(0055) #include "D:\ICC_H\I2C.H" //i2c即AVR的"twi"
(0056) #endif
(0057)
(0058) /* hard configs */
(0059) #ifndef flash
(0060) #define flash const
(0061) #endif
(0062)
(0063) #ifndef code
(0064) #define code const
(0065) #endif
(0066)
(0067) #ifndef NOP
(0068) #define NOP() asm("nop")
(0069) #endif
(0070)
(0071) /* io configs */
(0072) #define sbi(io,bit) ( io |= (1<<bit) ) //example: sbi(PORTA,0);sbi(DDRA,0);
(0073) #define cbi(io,bit) ( io &= ~(1<<bit) ) //example: cbi(PORTA,0);cbi(DDRA,0);
(0074) #define gbi(pin ,bit) ( pin & (1<<bit) ) //example: gbi(PINA,0);
(0075)
(0076) /* interrupt configs */
(0077) #define DIS_INT asm("sei")
(0078) #define EN_INT asm("cli")
(0079)
(0080) /* wdt configs */
(0081) #define WDT() asm("wdr")
(0082)
(0083) /* bit operation */
(0084) //#ifndef BIT
(0085) //#define BIT(x) ( 1<<(x) )
(0086) //#endif
(0087)
(0088) /* USART configs for 4 Mhz crystal */
(0089) //#define BAUD9600 25
(0090) //#define BAUD19000 12
(0091) //#define UART_TRAN_ON() UCR |= 0x08
(0092) //#define UART_TRAN_OFF() UCR &= ~0x08
(0093) //#define UART_RCV_ON() UCR |= 0x10
(0094) //#define UART_RCV_OFF() UCR &= ~0x10
(0095)
(0096) /*--------------------------------------------------------------------
(0097) 函数全称:50us 延时
(0098) 函数功能:当然是 50us延时 啦
(0099) 注意事项:基于7.3728M晶振,稍微有点误差
(0100) 提示说明:调用delay50us(20),得到1ms延时
(0101) 输 入:
(0102) 返 回:无
(0103) --------------------------------------------------------------------*/
(0104) void delay50us(sint16 t)
(0105) {
(0106) uint8 j;
(0107) for(;t>0;t--)
01D8 C007 RJMP 0x01E0
(0108) for(j=0;j<70;j++)
01D9 2744 CLR R20
01DA C001 RJMP 0x01DC
01DB 9543 INC R20
01DC 3446 CPI R20,0x46
01DD F3E8 BCS 0x01DB
01DE 5001 SUBI R16,1
01DF 4010 SBCI R17,0
01E0 2422 CLR R2
01E1 2433 CLR R3
01E2 1620 CP R2,R16
01E3 0631 CPC R3,R17
01E4 F3A4 BLT 0x01D9
01E5 940E02EA CALL pop_gset1
01E7 9508 RET
_delay50ms:
i --> R20
t --> R16
01E8 940E02E7 CALL push_gset1
(0109) ;
(0110) }
(0111) /*--------------------------------------------------------------------
(0112) 函数全称:50ms 延时
(0113) 函数功能:当然是 50ms延时 啦
(0114) 注意事项:基于7.3728M晶振,稍微有点误差
(0115) 提示说明:调用delay50ms(20),得到1s延时
(0116) 输 入:
(0117) 返 回:无
(0118) --------------------------------------------------------------------*/
(0119) void delay50ms(sint16 t)
(0120) {
(0121) uint16 i;
(0122) for(;t>0;t--)
01EA C00B RJMP 0x01F6
(0123) for(i=0;i<52642;i++)
01EB 2744 CLR R20
01EC 2755 CLR R21
01ED C002 RJMP 0x01F0
01EE 5F4F SUBI R20,0xFF
01EF 4F5F SBCI R21,0xFF
01F0 3A42 CPI R20,0xA2
01F1 ECED LDI R30,0xCD
01F2 075E CPC R21,R30
01F3 F3D0 BCS 0x01EE
01F4 5001 SUBI R16,1
01F5 4010 SBCI R17,0
01F6 2422 CLR R2
01F7 2433 CLR R3
01F8 1620 CP R2,R16
01F9 0631 CPC R3,R17
01FA F384 BLT 0x01EB
01FB 940E02EA CALL pop_gset1
01FD 9508 RET
FILE: E:\微雪电子CD1\产品资料\开发板实验板\SMK系列\SMK1632\实验教程\内核及主板相关实验\内核-AD\QueryAD\QueryAD.C
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立使用内部AD的查询示例程序
(0005)
(0006) 目标系统: 基于AVR单片机
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-06-25
(0013)
(0014) 开发人员: SEE
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -