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

📄 system.s

📁 《深入浅出AVR单片机——从ATmega48/88/168开始》的实例程序源代码
💻 S
字号:
	.module System.c
	.area lit(rom, con, rel)
_DisTab::
	.byte 252,96
	.byte 218,242
	.byte 'f,182
	.byte 190,224
	.byte 254,246
	.byte 238,62
	.byte 156,'z
	.byte 158,142
	.byte 206,28
	.byte 'n,124
	.byte 10,16
	.byte 2
	.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
	.dbsym e DisTab _DisTab A[23:23]kc
	.area data(ram, con, rel)
	.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
L2:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
	.area text(rom, con, rel)
	.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
	.dbfunc e LEDDisplay _LEDDisplay fV
	.dbsym s ScanStatu L2 c
;      LocalTime -> R20
	.even
_LEDDisplay::
	rcall push_gset1
	.dbline -1
	.dbline 92
; /*********************************************************/
; /*                                                       */
; /*               实例15   键盘显示模块                   */
; /*                                                       */
; /*                显示驱动测试程序                       */
; /*                                                       */
; /*                 程序设计 江海波                       */
; /*                                                       */
; /*        编写时间 : 2007-06     版本 : V1.0             */
; /*                                                       */
; /*     提示 : 代码受版权保护,示例程序用于工程应谨慎      */
; /*                                                       */
; /*           E-mail : soundman@sohu.com                  */
; /*-------------------------------------------------------*/
; /* 硬件环境:                                             */
; /*                                                       */
; /*     实验电路板,ATmega48单片机,CPU时钟1MHz             */
; /* ------------------------------------------------------*/
; /* 软件环境:                                             */
; /*                                                       */
; /*     ICCAVR 6.31A                                      */
; /* ------------------------------------------------------*/
; /* 最后修改时间:                                         */
; /*                                                       */
; /*-------------------------------------------------------*/
; /* 历史版本纪录:                                         */
; /*                                                       */
; /*********************************************************/
; 
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "PF_Config.h"
; 
; /********************
; *   系 统 宏 定 义  *
; ********************/
; 
; /*------------------*
; *   常 数 宏 定 义  *
; *------------------*/
; 
; #define ExtPortNum 3
; 
; #define Key_Press 0x00
; #define Key_Bounce 0x01
; #define Key_Release 0x02
; 
; #define PINE PortBuffer[0]
; #define PORTF PortBuffer[1]
; #define PORTG PortBuffer[2]
; 
; #define KeyPin PINE
; #define ScanPort PORTG
; #define SegPort PORTF
; 
; unsigned char PortBuffer[3];
; unsigned char LEDDisBuffer[8];
; 
; /*------------------*
; *   动 作 宏 定 义  *
; *------------------*/
; 
; /********************
; *  模块结构体定义区 *
; ********************/
; 
; /********************
; *   模块函数声明区  *
; ********************/
; 
; /********************
; *   模块变量声明区  *
; ********************/
; 
; const unsigned char DisTab[]=
; {
; 	0xFC,0x60,0xDA,0xF2,0x66,	//0,1,2,3,4
; 	0xB6,0xBE,0xE0,0xFE,0xF6,	//5,6,7,8,9
; 	0xEE,0x3E,0x9C,0x7A,0x9E,	//A,b,C,d,E
; 	0x8E,0xCE,0x1C,0x6E,0x7C,	//F,P,L,H,U
; 	0x0A,0x10,0x02				//r,_,-
; };
; 
; /***********************************************************
; *   函数说明:端口通讯程序                                 *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:                                             *
; ***********************************************************/
; void LEDDisplay (void)
; {
	.dbline 96
;     static unsigned char ScanStatu = 0;     //扫描状态标志,扫描程序内部使用
;     unsigned char LocalTime;                //函数内部使用的时标
; 
;     LocalTime = g_wSystemTimer%20;
	ldi R18,20
	ldi R19,0
	lds R16,_g_wSystemTimer
	lds R17,_g_wSystemTimer+1
	rcall mod16u
	mov R20,R16
	.dbline 98
; 
;     if (LocalTime > 16)
	ldi R24,16
	cp R24,R16
	brsh L3
	.dbline 99
;         return;
	rjmp L1
L3:
	.dbline 101
;     else
;         {
	.dbline 102
;             LocalTime >>= 1;
	lsr R20
	.dbline 103
;             ScanPort = (~(1<<LocalTime));
	ldi R16,1
	mov R17,R20
	rcall lsl8
	mov R2,R16
	com R2
	sts _PortBuffer+2,R2
	.dbline 104
;             SegPort = (DisTab[LEDDisBuffer[LocalTime]]);
	ldi R24,<_LEDDisBuffer
	ldi R25,>_LEDDisBuffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<_DisTab
	ldi R25,>_DisTab
	add R30,R24
	adc R31,R25
	lpm R30,Z
	sts _PortBuffer+1,R30
	.dbline 105
;         }
	.dbline -2
L1:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r LocalTime 20 c
	.dbend
	.dbfunc e Port_refresh _Port_refresh fV
;              i -> R16
	.even
_Port_refresh::
	.dbline -1
	.dbline 115
; }
; 
; /***********************************************************
; *   函数说明:端口通讯程序                                 *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:                                             *
; ***********************************************************/
; void Port_refresh (void)
; {
	.dbline 118
;     unsigned char i;
; 
;     SS_Low;                         //模拟#SS的下跳沿
	cbi 0x5,2
	.dbline 120
; 
;     for (i=0; i<ExtPortNum; i++)
	clr R16
	rjmp L11
L8:
	.dbline 121
;     {
	.dbline 122
;         SPDR = PortBuffer[i];       //刷新虚拟端口的一个字节
	ldi R24,<_PortBuffer
	ldi R25,>_PortBuffer
	mov R30,R16
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x2e,R2
L12:
	.dbline 123
L13:
	.dbline 123
	in R2,0x2d
	sbrs R2,7
	rjmp L12
	.dbline 124
L9:
	.dbline 120
	inc R16
L11:
	.dbline 120
	cpi R16,3
	brlo L8
	.dbline 126
;         while(!(SPSR&(1<<SPIF)));   //等待通讯完成
;     }
; 
;     SS_High;                        //模拟#SS的上跳沿
	sbi 0x5,2
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 136
; }
; 
; /***********************************************************
; *   函数说明:主函数                                       *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:System_INIT()                                *
; ***********************************************************/
; void main(void)
; {
	.dbline 137
;     System_INIT();                                          //代码初始化
	rcall _System_INIT
	.dbline 139
;     
;     LEDDisBuffer[0] = 0x00;
	clr R2
	sts _LEDDisBuffer,R2
	.dbline 140
;     LEDDisBuffer[1] = 0x01;
	ldi R24,1
	sts _LEDDisBuffer+1,R24
	.dbline 141
;     LEDDisBuffer[2] = 0x02;
	ldi R24,2
	sts _LEDDisBuffer+2,R24
	.dbline 142
;     LEDDisBuffer[3] = 0x03;
	ldi R24,3
	sts _LEDDisBuffer+3,R24
	.dbline 143
;     LEDDisBuffer[4] = 0x04;
	ldi R24,4
	sts _LEDDisBuffer+4,R24
	.dbline 144
;     LEDDisBuffer[5] = 0x05;
	ldi R24,5
	sts _LEDDisBuffer+5,R24
	.dbline 145
;     LEDDisBuffer[6] = 0x06;
	ldi R24,6
	sts _LEDDisBuffer+6,R24
	.dbline 146
;     LEDDisBuffer[7] = 0x07;
	ldi R24,7
	sts _LEDDisBuffer+7,R24
	rjmp L24
L23:
	.dbline 149
; 
;     while(TRUE)                                             //超级循环
;     {
	.dbline 150
;         if (DoTime==TRUE)
	lds R24,_DoTime
	cpi R24,1
	brne L26
	.dbline 151
;         {
	.dbline 152
;             DoTime=FALSE;
	clr R2
	sts _DoTime,R2
	.dbline 153
;             LEDDisplay();
	rcall _LEDDisplay
	.dbline 154
;             Port_refresh();
	rcall _Port_refresh
	.dbline 155
;         }
L26:
	.dbline 156
L24:
	.dbline 148
	rjmp L23
X0:
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
_LEDDisBuffer::
	.blkb 8
	.dbsym e LEDDisBuffer _LEDDisBuffer A[8:8]c
_PortBuffer::
	.blkb 3
	.dbsym e PortBuffer _PortBuffer A[3:3]c

⌨️ 快捷键说明

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