📄 system.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 + -