📄 eeprom.lis
字号:
.module eeprom.c
.area text(rom, con, rel)
0000 .dbfile E:\iccavr代码\实验16_片内EEPROM的使用\eeprom.c
0000 .dbfunc e DelaymS _DelaymS fV
0000 ; j -> R20,R21
0000 ; k -> R22,R23
0000 ; i -> R16,R17
.even
0000 _DelaymS::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 36
0002 ; //******************************************************************************
0002 ; // *
0002 ; // FileName : 实验板eeprom片内.c ICCAVR V6.31A编译 *
0002 ; // Function : 片内eeprom操作练习 *
0002 ; // Date : 2006-11-14 *
0002 ; // Version : 1.0 *
0002 ; // *
0002 ; // Author : 开关电源 hongtusy@163.com *
0002 ; // Company : 电子信息技术咨询网 http://www.itsn.cn *
0002 ; // *
0002 ; //***************************描述与记事*****************************************
0002 ; //实验板的AVR程序,片内eeprom操作练习,和计算机通讯,上电后首先发送保存在片内的数据
0002 ; //然后接收PC发送的数据并保存起来,然后读取数据返回给pc,断电后数据不丢失。
0002 ; //接线定义:将串口经rs232连接pc机 即PW6-7/8.
0002 ; //记事:本程序旨在对片内eeprom使用的理解与演示,程序适合初学者使用.
0002 ; //使用8MHz晶体。
0002 ; //******************************************************************************
0002 ;
0002 ; #include <iom8535v.h> //头文件,ATmega8535单片机的寄存器定义
0002 ; #include <macros.h> //
0002 ;
0002 ; typedef unsigned char uchar;
0002 ; typedef unsigned int uint;
0002 ;
0002 ; #define BAUDRATE 9600 //波特率
0002 ; #define F_CPU 8000000 //系统晶体频率
0002 ;
0002 ; /************************************************
0002 ; 函 数 名: DelaymS()
0002 ; 功 能: 毫秒级延时函数
0002 ; 输入参数: 延迟时间/系统晶体
0002 ; 输出参数: 做相应的延迟处理
0002 ; 描 述: /
0002 ; ***********************************************/
0002 ; void DelaymS (uint i) //延时函数,参数i为延时时间
0002 ; {
0002 .dbline 38
0002 ; uint j,k; //双重延时
0002 ; for (j=0;j<i;j++)
0002 4427 clr R20
0004 5527 clr R21
0006 0CC0 rjmp L5
0008 L2:
0008 .dbline 39
0008 ; {
0008 .dbline 40
0008 6627 clr R22
000A 7727 clr R23
000C 02C0 rjmp L9
000E L6:
000E .dbline 40
000E L7:
000E .dbline 40
000E 6F5F subi R22,255 ; offset = 1
0010 7F4F sbci R23,255
0012 L9:
0012 .dbline 40
0012 84EF ldi R24,500
0014 91E0 ldi R25,1
0016 8617 cp R24,R22
0018 9707 cpc R25,R23
001A C8F7 brsh L6
001C .dbline 41
001C L3:
001C .dbline 38
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 L5:
0020 .dbline 38
0020 4017 cp R20,R16
0022 5107 cpc R21,R17
0024 88F3 brlo L2
0026 .dbline -2
0026 L1:
0026 00D0 rcall pop_gset2
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r j 20 i
002A .dbsym r k 22 i
002A .dbsym r i 16 i
002A .dbend
002A .dbfunc e Send_word _Send_word fV
002A ; h -> R16
.even
002A _Send_word::
002A .dbline -1
002A .dbline 51
002A ; for (k=0;k<=500;k++);
002A ; }
002A ; }
002A ; /********************************************************
002A ; 子程序名: Send_word()
002A ; 功 能: 串口发送一个字节
002A ; 输入参数: /
002A ; 输出参数: /
002A ; 描 述: 把数据发送出去先发送再检测,发完后,才离开
002A ; ********************************************************/
002A ; void Send_word(uchar h)
002A ; {
002A .dbline 52
002A ; UDR = h; //发送一个字符数据
002A 0CB9 out 0xc,R16
002C L11:
002C .dbline 54
002C L12:
002C .dbline 53
002C ; while(!(UCSRA&(1<<UDRE))) //1字节发送完毕?
002C 5D9B sbis 0xb,5
002E FECF rjmp L11
0030 .dbline -2
0030 L10:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r h 16 c
0032 .dbend
0032 .dbfunc e receive_word _receive_word fc
.even
0032 _receive_word::
0032 .dbline -1
0032 .dbline 64
0032 ; ;
0032 ; }
0032 ; /********************************************************
0032 ; 子程序名: receive_word()
0032 ; 功 能: 串口接收一个字节数据
0032 ; 输入参数: /
0032 ; 输出参数: /
0032 ; 描 述: /
0032 ; ********************************************************/
0032 ; uchar receive_word (void)
0032 ; {
0032 L15:
0032 .dbline 66
0032 L16:
0032 .dbline 65
0032 ; while(!(UCSRA&(1<<RXC))) //1字节接收完成?
0032 5F9B sbis 0xb,7
0034 FECF rjmp L15
0036 .dbline 67
0036 ; ;
0036 ; return UDR; //输出接收到的数据
0036 0CB1 in R16,0xc
0038 .dbline -2
0038 L14:
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbend
003A .dbfunc e mcu_Init _mcu_Init fV
.even
003A _mcu_Init::
003A .dbline -1
003A .dbline 77
003A ; }
003A ; /************************************************
003A ; 函 数 名: Init_port()
003A ; 功 能: 单片机初始化函数
003A ; 输入参数: /
003A ; 输出参数: /
003A ; 描 述: 相关口方向的设置等
003A ; ***********************************************/
003A ; void mcu_Init(void)
003A ; {
003A .dbline 78
003A ; DDRD = 0xff;//PD口为推挽1输出,位码,PD7为485DE脚。口方向不影响串口。
003A 8FEF ldi R24,255
003C 81BB out 0x11,R24
003E .dbline -2
003E L18:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbend
0040 .dbfunc e usart_Init _usart_Init fV
.even
0040 _usart_Init::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -