?? eeprom.lis
字號:
.module eeprom.c
.area text(rom, con, rel)
0000 .dbfile E:\iccavr代碼\實驗16_片內(nèi)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片內(nèi).c ICCAVR V6.31A編譯 *
0002 ; // Function : 片內(nèi)eeprom操作練習 *
0002 ; // Date : 2006-11-14 *
0002 ; // Version : 1.0 *
0002 ; // *
0002 ; // Author : 開關(guān)電源 hongtusy@163.com *
0002 ; // Company : 電子信息技術(shù)咨詢網(wǎng) http://www.itsn.cn *
0002 ; // *
0002 ; //***************************描述與記事*****************************************
0002 ; //實驗板的AVR程序,片內(nèi)eeprom操作練習,和計算機通訊,上電后首先發(fā)送保存在片內(nèi)的數(shù)據(jù)
0002 ; //然后接收PC發(fā)送的數(shù)據(jù)并保存起來,然后讀取數(shù)據(jù)返回給pc,斷電后數(shù)據(jù)不丟失。
0002 ; //接線定義:將串口經(jīng)rs232連接pc機 即PW6-7/8.
0002 ; //記事:本程序旨在對片內(nèi)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 //系統(tǒng)晶體頻率
0002 ;
0002 ; /************************************************
0002 ; 函 數(shù) 名: DelaymS()
0002 ; 功 能: 毫秒級延時函數(shù)
0002 ; 輸入?yún)?shù): 延遲時間/系統(tǒng)晶體
0002 ; 輸出參數(shù): 做相應的延遲處理
0002 ; 描 述: /
0002 ; ***********************************************/
0002 ; void DelaymS (uint i) //延時函數(shù),參數(shù)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 ; 功 能: 串口發(fā)送一個字節(jié)
002A ; 輸入?yún)?shù): /
002A ; 輸出參數(shù): /
002A ; 描 述: 把數(shù)據(jù)發(fā)送出去先發(fā)送再檢測,發(fā)完后,才離開
002A ; ********************************************************/
002A ; void Send_word(uchar h)
002A ; {
002A .dbline 52
002A ; UDR = h; //發(fā)送一個字符數(shù)據(jù)
002A 0CB9 out 0xc,R16
002C L11:
002C .dbline 54
002C L12:
002C .dbline 53
002C ; while(!(UCSRA&(1<<UDRE))) //1字節(jié)發(fā)送完畢?
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 ; 功 能: 串口接收一個字節(jié)數(shù)據(jù)
0032 ; 輸入?yún)?shù): /
0032 ; 輸出參數(shù): /
0032 ; 描 述: /
0032 ; ********************************************************/
0032 ; uchar receive_word (void)
0032 ; {
0032 L15:
0032 .dbline 66
0032 L16:
0032 .dbline 65
0032 ; while(!(UCSRA&(1<<RXC))) //1字節(jié)接收完成?
0032 5F9B sbis 0xb,7
0034 FECF rjmp L15
0036 .dbline 67
0036 ; ;
0036 ; return UDR; //輸出接收到的數(shù)據(jù)
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 ; 函 數(shù) 名: Init_port()
003A ; 功 能: 單片機初始化函數(shù)
003A ; 輸入?yún)?shù): /
003A ; 輸出參數(shù): /
003A ; 描 述: 相關(guān)口方向的設置等
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 + -