📄 m16int.lst
字号:
__start:
__text_start:
0030 E5CF LDI R28,0x5F
0031 E0D4 LDI R29,4
0032 BFCD OUT 0x3D,R28
0033 BFDE OUT 0x3E,R29
0034 51C0 SUBI R28,0x10
0035 40D0 SBCI R29,0
0036 EA0A LDI R16,0xAA
0037 8308 STD Y+0,R16
0038 2400 CLR R0
0039 E6EB LDI R30,0x6B
003A E0F0 LDI R31,0
003B E010 LDI R17,0
003C 36EB CPI R30,0x6B
003D 07F1 CPC R31,R17
003E F011 BEQ 0x0041
003F 9201 ST R0,Z+
0040 CFFB RJMP 0x003C
0041 8300 STD Z+0,R16
0042 E5E4 LDI R30,0x54
0043 E0F0 LDI R31,0
0044 E6A0 LDI R26,0x60
0045 E0B0 LDI R27,0
0046 E010 LDI R17,0
0047 35EF CPI R30,0x5F
0048 07F1 CPC R31,R17
0049 F021 BEQ 0x004E
004A 95C8 LPM
004B 9631 ADIW R30,1
004C 920D ST R0,X+
004D CFF9 RJMP 0x0047
004E 940E00B9 CALL _main
_exit:
0050 CFFF RJMP _exit
_ChangeIntToHex:
dec --> R20
0051 940E0168 CALL push_gset1
0053 01A8 MOVW R20,R16
FILE: F:\job\M16学习板\中断实验(实验五)\..\ICC_H\SOFTWARE.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 Software_H
(0041) #define Software_H
(0042)
(0043) #include <math.h>
(0044) #include <string.h>
(0045)
(0046) /* 兼容一般程序员的常用写法 */
(0047) typedef unsigned char uchar;
(0048) typedef unsigned int uint;
(0049) typedef unsigned long ulong;
(0050) typedef signed char schar;
(0051) typedef signed int sint;
(0052) typedef signed long slong;
(0053)
(0054) /* 为方便移植,建议使用下面写法 */
(0055) typedef unsigned char bool;
(0056) typedef unsigned char bit;
(0057) typedef unsigned char uint8;
(0058) typedef unsigned int uint16;
(0059) typedef unsigned long uint32;
(0060) typedef signed char sint8;
(0061) typedef signed int sint16;
(0062) typedef signed long sint32;
(0063) typedef signed char int8;
(0064) typedef signed int int16;
(0065) typedef signed long int32;
(0066) //typedef const code;
(0067)
(0068) /* 一般程序定义的默认值 */
(0069) #define NULL 0
(0070) #define EOF -1
(0071) #define TRUE 1
(0072) #define FALSE 0
(0073) #define ON 1
(0074) #define OFF 0
(0075) #define ENABLE 1
(0076) #define DISABLE 0
(0077) #define CRR 1
(0078) #define ERR 0
(0079) #define RIGHT 1
(0080) #define WRONG 0
(0081) #define SUCCESS 1
(0082) #define FAILURE 0
(0083) //#define PI 3.1415926 //3.1415926535897932
(0084)
(0085) /* 如果你手头上的RAM实在很紧,不如尝试下面的define~ */
(0086) //#define _CALLOC(a) ( (a *)calloc(n,sizeof(a)) )
(0087) //#define _MALLOC(a) ( (a *)malloc(sizeof(a)) )
(0088) //#define _MIN(a,b) ( (a) < (b) ? (a) : (b) )
(0089) //#define _MAX(a,b) ( (a) > (b) ? (a) : (b) )
(0090) //#define _EXCHANGE(a,b) { int t; t=a; a=b; b=t; }
(0091) //#define _TOLOWER(c) ( (c)+32 )
(0092) //#define _TOUPPER(c) ( (c)-32 )
(0093)
(0094) //#ifndef BIT
(0095) //#define BIT(x) ( 1<<(x) )
(0096) //#endif
(0097)
(0098) /*--------------------------------------------------------------------
(0099) 函数全称:数据拆字
(0100) 函数功能:自己看~
(0101) 注意事项:D<=999999,C<=6
(0102) 提示说明:调用speaData(12,2),得到dataElem[0]=2,dataElem[1]=1
(0103) 输 入:
(0104) 返 回:无
(0105) --------------------------------------------------------------------
(0106) uint8 dataElem[6];
(0107) void speaData(uint32 dat,sint8 len)
(0108) {
(0109) uint8 i;
(0110) uint32 j,y;
(0111) for(i=0,j=1;i<len;i++)
(0112) {
(0113) y=dat/j;
(0114) dataElem[i]=y%10;
(0115) j*=10;
(0116) }
(0117) }
(0118) /*--------------------------------------------------------------------
(0119) 函数全称:十进制强制转换为十六进制
(0120) 函数功能:
(0121) 注意事项:
(0122) 提示说明:调用changeIntToHex(33),return 0x33
(0123) 输 入:
(0124) 返 回:
(0125) --------------------------------------------------------------------*/
(0126) #define changeIntToHex(dec) ( ( ((dec)/10) <<4 ) + ((dec)%10) )
(0127) /*--------------------------------------------------------------------
(0128) 函数全称:十进制强制转换为十六进制
(0129) 函数功能:
(0130) 注意事项:
(0131) 提示说明:调用changeIntToHex(33),return 0x33
(0132) 输 入:
(0133) 返 回:
(0134) --------------------------------------------------------------------*/
(0135) void ChangeIntToHex( uchar *dec)
(0136) {
(0137) *dec = (((*dec)/10) <<4 )|((*dec)%10) ;
0054 01FA MOVW R30,R20
0055 8020 LDD R2,Z+0
0056 2433 CLR R3
0057 E01A LDI R17,0xA
0058 2D02 MOV R16,R2
0059 940E0148 CALL mod8u
005B 2E40 MOV R4,R16
005C E01A LDI R17,0xA
005D 2D02 MOV R16,R2
005E 940E014A CALL div8u
0060 2F80 MOV R24,R16
0061 708F ANDI R24,0xF
0062 9582 SWAP R24
0063 2984 OR R24,R4
0064 01FA MOVW R30,R20
0065 8380 STD Z+0,R24
0066 940E016B CALL pop_gset1
0068 9508 RET
(0138) }
(0139) /*--------------------------------------------------------------------
(0140) 函数全称:十进制化为十六进制,并以十进制格式返回
(0141) 函数功能:
(0142) 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳
(0143) 提示说明:调用converseIntToHex(33),return 21
(0144) 输 入:
(0145) 返 回:
(0146) --------------------------------------------------------------------/
(0147) #define converseIntToHex(dec) ( ( ((dec)>>4) *10 ) + ((dec)%16) )
(0148) /*--------------------------------------------------------------------
(0149) 函数全称:十六进制强制转换为十进制
(0150) 函数功能:
(0151) 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳
(0152) 提示说明:调用changeHexToInt(0x33),return 33
(0153) 输 入:
(0154) 返 回:
(0155) --------------------------------------------------------------------*/
(0156) #define changeHexToInt(hex) ( ( ((hex)>>4) *10 ) + ((hex)%16) )
(0157) /*--------------------------------------------------------------------
(0158) 函数全称:十六进制强制转换为十进制
(0159) 函数功能:
(0160) 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳
(0161) 提示说明:调用changeHexToInt(0x33),return 33
(0162) 输 入:
(0163) 返 回:
(0164) --------------------------------------------------------------------*/
(0165) void ChangeHexToInt(uchar *hex)
(0166) {
(0167) *hex = (((*hex)>>4) *10 ) + ((*hex)&0x0f);
_ChangeHexToInt:
hex --> R16
0069 01F8 MOVW R30,R16
006A 8020 LDD R2,Z+0
006B 2433 CLR R3
006C 2D82 MOV R24,R2
006D 9582 SWAP R24
006E 708F ANDI R24,0xF
006F E09A LDI R25,0xA
0070 9F98 MUL R25,R24
0071 2D82 MOV R24,R2
0072 708F ANDI R24,0xF
0073 2C20 MOV R2,R0
0074 0E28 ADD R2,R24
0075 8220 STD Z+0,R2
0076 9508 RET
(0168) }
(0169) /*--------------------------------------------------------------------
(0170) 函数全称:十六进制化为十进制,,并以十六进制格式返回
(0171) 函数功能:
(0172) 注意事项:
(0173) 提示说明:调用converseHexToInt(0x33),return 0x51
(0174) 输 入:
(0175) 返 回:
(0176) --------------------------------------------------------------------*/
(0177) #define converseHexToInt(hex) ( ( ((hex)/10) <<4 ) + ((hex)%10) )
(0178)
(0179) void Delay(void)
(0180) {
(0181) uchar i;
(0182) i = 200;
_Delay:
i --> R16
0077 EC08 LDI R16,0xC8
(0183) while(i--);
0078 2E20 MOV R2,R16
0079 2433 CLR R3
007A 5001 SUBI R16,1
007B 2022 TST R2
007C F7D9 BNE 0x0078
007D 9508 RET
_int0_isr:
007E 938A ST R24,-Y
007F 939A ST R25,-Y
0080 B78F IN R24,0x3F
0081 938A ST R24,-Y
FILE: F:\job\M16学习板\中断实验(实验五)\M16Int.c
(0001) /*******************************************************************
(0002) 实验五
(0003) 实验名称: 中断实验,LED数码管显示中断数据
(0004) 实验目的: 学习AVR单片机的中断功能
(0005) 实验现象: 按键按下计数,数码管显示计数结果
(0006) 环 境: ICCAVR6.31A
(0007) 设 计 者: shinea8868
(0008) 说 明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
(0009) 作商业用途请保留本段文字
(0010) 完成日期: 2007年4月9日
(0011) *******************************************************************/
(0012)
(0013) #include <iom16v.h>
(0014) #include <macros.h>
(0015) #include "..\ICC_H\SOFTWARE.h"
(0016)
(0017)
(0018) uchar IntCnt = 0; //记录中断次数
(0019) uchar disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
(0020)
(0021) #pragma interrupt_handler int0_isr:2
(0022) void int0_isr(void)
(0023) {
(0024) IntCnt++;
0082 91800060 LDS R24,IntCnt
0084 5F8F SUBI R24,0xFF
0085 93800060 STS IntCnt,R24
0087 9189 LD R24,Y+
0088 BF8F OUT 0x3F,R24
0089 9199 LD R25,Y+
008A 9189 LD R24,Y+
008B 9518 RETI
_DelayMs:
j --> R20
i --> R16
008C 940E0168 CALL push_gset1
(0025) }
(0026) /*-----------------------------------------------------------------
(0027) 延时程序计算方法
(0028) 计数个数j = 延时时间/6*晶振频率 - 1
(0029) 函数名称: void DelayMs(uchar i)
(0030) 函数功能: 毫秒延时
(0031) 参 数:
(0032) 返 回 值: 无
(0033) -----------------------------------------------------------------*/
(0034) void DelayMs(uchar i)
(0035) {
008E C006 RJMP 0x0095
(0036) uchar j;
(0037) while(i--)
(0038) {
(0039) j = 167;//1mhz 1ms延时
008F EA47 LDI R20,0xA7
(0040) while(j--);
0090 2E24 MOV R2,R20
0091 2433 CLR R3
0092 5041 SUBI R20,1
0093 2022 TST R2
0094 F7D9 BNE 0x0090
0095 2E20 MOV R2,R16
0096 2433 CLR R3
0097 5001 SUBI R16,1
0098 2022 TST R2
0099 F7A9 BNE 0x008F
009A 940E016B CALL pop_gset1
009C 9508 RET
(0041) }
(0042) }
(0043)
(0044) /*-----------------------------------------------------------------
(0045) 函数名称: void SPIMasterInit(void)
(0046) 函数功能: SPI初始化为主机
(0047) 参 数:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -