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

📄 system.s

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 S
字号:
	.module System.c
	.area text(rom, con, rel)
	.dbfile D:\实例17_I2C抢答器_主机程序\System.c
	.dbfunc e winner _winner fV
;              b -> R16,R17
;              a -> R18,R19
	.even
_winner::
	.dbline -1
	.dbline 64
; /*********************************************************/
; /*                                                       */
; /*             实例17 I2C抢答器 主机程序                 */
; /*                                                       */
; /*                 程序设计 江海波                       */
; /*                                                       */
; /*        编写时间 : 2007-8      版本 : V1.0             */
; /*                                                       */
; /*     提示 : 代码受版权保护,示例程序用于工程应谨慎      */
; /*                                                       */
; /*           E-mail : soundman@sohu.com                  */
; /*-------------------------------------------------------*/
; /* 硬件环境:                                             */
; /*                                                       */
; /*     实验电路板,ATmega48单片机,CPU时钟1MHz             */
; /* ------------------------------------------------------*/
; /* 软件环境:                                             */
; /*                                                       */
; /*     ICCAVR 6.31A                                      */
; /* ------------------------------------------------------*/
; /* 最后修改时间:                                         */
; /*                                                       */
; /*-------------------------------------------------------*/
; /* 历史版本纪录:                                         */
; /*                                                       */
; /*********************************************************/
; 
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "PF_Config.h"
; 
; /********************
; *   系 统 宏 定 义  *
; ********************/
; 
; /*------------------*
; *   常 数 宏 定 义  *
; *------------------*/
; 
; /*------------------*
; *   动 作 宏 定 义  *
; *------------------*/
; 
; /********************
; *  模块结构体定义区 *
; ********************/
; 
; /********************
; *   模块函数声明区  *
; ********************/
; 
; /********************
; *   模块变量声明区  *
; ********************/
; 
; /***********************************************************
; *   函数说明:胜出者判决函数                               *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; void winner (void)
; {
	.dbline 66
;     unsigned int a,b;
;     a = ((((unsigned int)RecArr[1])<<4)|((unsigned int)RecArr[2]));
	lds R2,_RecArr+2
	clr R3
	lds R18,_RecArr+1
	clr R19
	lsl R18
	rol R19
	lsl R18
	rol R19
	lsl R18
	rol R19
	lsl R18
	rol R19
	or R18,R2
	or R19,R3
	.dbline 67
;     b = ((((unsigned int)RecArr[4])<<4)|((unsigned int)RecArr[5]));
	lds R2,_RecArr+5
	clr R3
	lds R16,_RecArr+4
	clr R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	or R16,R2
	or R17,R3
	.dbline 68
;     if (a<b)
	cp R18,R16
	cpc R19,R17
	brsh L6
	.dbline 69
;     {
	.dbline 70
;         LEDDisBuffer[7] = (RecArr[0]>>4);
	lds R24,_RecArr
	swap R24
	andi R24,#0x0F
	sts _LEDDisBuffer+7,R24
	.dbline 71
;         LEDDisBuffer[6] = SPACE;
	ldi R24,23
	sts _LEDDisBuffer+6,R24
	.dbline 72
;         LEDDisBuffer[5] = SPACE;
	sts _LEDDisBuffer+5,R24
	.dbline 73
;         LEDDisBuffer[4] = SPACE;
	sts _LEDDisBuffer+4,R24
	.dbline 74
;         LEDDisBuffer[3] = (RecArr[1]>>4);
	lds R24,_RecArr+1
	swap R24
	andi R24,#0x0F
	sts _LEDDisBuffer+3,R24
	.dbline 75
;         LEDDisBuffer[2] = (RecArr[1]&0x0F);
	lds R24,_RecArr+1
	andi R24,15
	sts _LEDDisBuffer+2,R24
	.dbline 76
;         LEDDisBuffer[1] = (RecArr[2]>>4);
	lds R24,_RecArr+2
	swap R24
	andi R24,#0x0F
	sts _LEDDisBuffer+1,R24
	.dbline 77
;         LEDDisBuffer[0] = (RecArr[2]&0x0F);
	lds R24,_RecArr+2
	andi R24,15
	sts _LEDDisBuffer,R24
	.dbline 78
;     }
	rjmp L7
L6:
	.dbline 80
	.dbline 81
	lds R24,_RecArr+3
	swap R24
	andi R24,#0x0F
	sts _LEDDisBuffer+7,R24
	.dbline 82
	ldi R24,23
	sts _LEDDisBuffer+6,R24
	.dbline 83
	sts _LEDDisBuffer+5,R24
	.dbline 84
	sts _LEDDisBuffer+4,R24
	.dbline 85
	lds R24,_RecArr+4
	swap R24
	andi R24,#0x0F
	sts _LEDDisBuffer+3,R24
	.dbline 86
	lds R24,_RecArr+4
	andi R24,15
	sts _LEDDisBuffer+2,R24
	.dbline 87
	lds R24,_RecArr+5
	swap R24
	andi R24,#0x0F
	sts _LEDDisBuffer+1,R24
	.dbline 88
	lds R24,_RecArr+5
	andi R24,15
	sts _LEDDisBuffer,R24
	.dbline 89
L7:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r b 16 i
	.dbsym r a 18 i
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 99
;     else
;     {
;         LEDDisBuffer[7] = (RecArr[3]>>4);
;         LEDDisBuffer[6] = SPACE;
;         LEDDisBuffer[5] = SPACE;
;         LEDDisBuffer[4] = SPACE;
;         LEDDisBuffer[3] = (RecArr[4]>>4);
;         LEDDisBuffer[2] = (RecArr[4]&0x0F);
;         LEDDisBuffer[1] = (RecArr[5]>>4);
;         LEDDisBuffer[0] = (RecArr[5]&0x0F);
;     }
; }
; 
; /***********************************************************
; *   函数说明:主函数                                       *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:System_INIT()                                *
; ***********************************************************/
; void main(void)
; {
	.dbline 100
;     System_INIT();                          //代码初始化
	rcall _System_INIT
	.dbline 102
;     
;     RecArr[0]=0xFF;
	ldi R24,255
	sts _RecArr,R24
	.dbline 103
;     RecArr[1]=0xFF;
	sts _RecArr+1,R24
	.dbline 104
;     RecArr[2]=0xFF;
	sts _RecArr+2,R24
	.dbline 105
;     RecArr[3]=0xFF;
	sts _RecArr+3,R24
	.dbline 106
;     RecArr[4]=0xFF;
	sts _RecArr+4,R24
	.dbline 107
;     RecArr[5]=0xFF;
	sts _RecArr+5,R24
	.dbline 108
;     LEDDisBuffer[0] = Led__;
	ldi R24,21
	sts _LEDDisBuffer,R24
	.dbline 109
;     LEDDisBuffer[1] = Led__;
	sts _LEDDisBuffer+1,R24
	.dbline 110
;     LEDDisBuffer[2] = Led__;
	sts _LEDDisBuffer+2,R24
	.dbline 111
;     LEDDisBuffer[3] = Led__;
	sts _LEDDisBuffer+3,R24
	.dbline 112
;     LEDDisBuffer[4] = Led__;
	sts _LEDDisBuffer+4,R24
	.dbline 113
;     LEDDisBuffer[5] = Led__;
	sts _LEDDisBuffer+5,R24
	.dbline 114
;     LEDDisBuffer[6] = Led__;
	sts _LEDDisBuffer+6,R24
	.dbline 115
;     LEDDisBuffer[7] = Led__;
	sts _LEDDisBuffer+7,R24
	.dbline 117
; 
;     TIMERSTART;
	ldi R24,4
	sts 129,R24
	.dbline 119
;     
;     TWCR |= (1<<TWSTA);                     //启动总线
	lds R24,188
	ori R24,32
	sts 188,R24
	rjmp L45
L44:
	.dbline 121
;     while(1)                                //超级循环
;     {
	.dbline 122
;         if (ShowTime == TRUE)
	lds R24,_ShowTime
	cpi R24,1
	brne L47
	.dbline 123
;         {
	.dbline 124
;             if (RecArr[0] == 0xFF)          //没有任何从机响应
	lds R24,_RecArr
	cpi R24,255
	brne L49
	.dbline 125
;             {
	.dbline 126
;                 LEDDisBuffer[0] = Led__;
	ldi R24,21
	sts _LEDDisBuffer,R24
	.dbline 127
;                 LEDDisBuffer[1] = Led__;
	sts _LEDDisBuffer+1,R24
	.dbline 128
;                 LEDDisBuffer[2] = Led__;
	sts _LEDDisBuffer+2,R24
	.dbline 129
;                 LEDDisBuffer[3] = Led__;
	sts _LEDDisBuffer+3,R24
	.dbline 130
;                 LEDDisBuffer[4] = Led__;
	sts _LEDDisBuffer+4,R24
	.dbline 131
;                 LEDDisBuffer[5] = Led__;
	sts _LEDDisBuffer+5,R24
	.dbline 132
;                 LEDDisBuffer[6] = Led__;
	sts _LEDDisBuffer+6,R24
	.dbline 133
;                 LEDDisBuffer[7] = 0x0E;
	ldi R24,14
	sts _LEDDisBuffer+7,R24
	.dbline 134
;             }
	rjmp L50
L49:
	.dbline 136
;             else
;             {
	.dbline 137
;                 winner();
	rcall _winner
	.dbline 138
;             }
L50:
	.dbline 139
;         }
L47:
	.dbline 141
;         
;         if (DoTime == 1)
	lds R24,_DoTime
	cpi R24,1
	brne L58
	.dbline 142
;         {
	.dbline 143
;             DoTime=0;
	clr R2
	sts _DoTime,R2
	.dbline 144
;             LEDDisplay();
	rcall _LEDDisplay
	.dbline 145
;             Port_refresh();
	rcall _Port_refresh
	.dbline 146
;         }
L58:
	.dbline 147
L45:
	.dbline 120
	rjmp L44
X0:
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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