?? newtextdocument.c
字號:
/* switch (counter)
{
case 0:
P3^2=0;
P3^3=1;
P3^4=1;
P3^5=1;
break;
case 1:
P3^2=1;
P3^3=0;
P3^4=1;
P3^5=1;break;
case 3:
P3^2=1;
P3^3=1;
P3^4=0;
P3^5=1;break;
case 4:
P3^2=1;
P3^3=1;
P3^4=1;
P3^5=0;break;
default:
P3^2=1;
P3^3=1;
P3^4=1;
P3^5=1;
}
//判斷是否是第一次啟動,是則 進行。。。。
// 發送數據時是否要關閉 Serial port---v,和T0 RUN---?--因為 485 是半雙工,所以發送就不能接收,
//可是RS232 是全雙工,。。。 V,open T0,close Serial port
//添加對 20H 21H的識別會有什么問題?----the end V,no problem
//接受12 個數據時要判斷01、02、03、04 ---the second X,
//第四個命令串,是否可以更改 slaver_ADD ,并發送給主機?-------first V
//發送程序的 WR=1; delay(1); WR=0; 是否需要?---看情況再說 V,noneeded
//main主程序的流程還有別的方式 嗎??***, vx 暫時沒
//應該是主機發別的無效的數據,可以不理會。重新開始接收。
//每次定義一個新工程 要修改,工程變量 /輸出文件位置/串口軟件 通訊方式/外部選擇晶振/。
//變量定義和代碼間必須留一行空行
//標明主要函數的說明。
//調試方法,可以顯示變量值,等待主程序發回響應,就可以繼續執行,相當于斷點 ??--sentonedata();
//函數有返回值時,需要在設計函數時加 return。
//接受和發送數據時RD-RE 要置 和清。
//{
//if(point%2==1)
//if receiver_buff==0x01}
//置SM2=0是否和RI=1;有同樣效果,主機每發送一串數,立即有反應??
//去掉串口中斷的 判斷RI 是否有問題??
//引入一個數組 or變量,每次寫進一個新Slaver_ADD, 放入此位置,并寫入flash
//讀主機的地址數據時,從flash調出,測試是否與此變量一樣,
//一份 可以接收任意字符的接收程序。有LED顯示地址位信息的。
//主要為第一功能。
//***不看 3Q 和4U 是否會有問題???
//不停發送數據時 ,LED會閃,是程序問題 還是 硬件問題??
//接收的數據不在范圍內時怎么辦??
//怎么突破新加一個 緩沖區,接收數據沒變化的問題。
//可以自己做頭文件,把分支程序 寫到里面
//寫入RE52.h的頭文件,,是工程里的優先嗎 還是程序默認的目錄下的?
//---星研是程序默認目錄下的
*/
//flash操作等待時間 & Enable ISP功能
#include<reg52.h>
#include<stdio.h>
//#include<isp-1.h>
sfr ISP_DATA = 0xE2;
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE2;
sfr ISP_TRIG = 0xE2;
sfr ISP_CONTR = 0xE2;
#define ENABLE_ISP 0x80 //<30MHZ
/*
#define ENABLE_ISP 0x81 //
#define ENABLE_ISP 0x82 //
#define ENABLE_ISP 0x83 //<12MHZ
#define ENABLE_ISP 0x84 //
#define ENABLE_ISP 0x85 //
#define ENABLE_ISP 0x86 //
#define ENABLE_ISP 0x87 //<1MHZ
*/
#define DEBUG_DATA 0x05
#define DATA_FLASH_START_ADDRESSH 0x28
#define DATA_FLASH_START_ADDRESSL 0x00
void ISP_DISABLE(void)
{
ISP_CONTR=0x00;
ISP_CMD=0x00;
ISP_TRIG=0x00;
}
unsigned char byte_read(void)
//讀主機的地址數據時,從DATA flash調出,測試是否與此變量一樣
//在主程序中執行,初始化時,讀入變量 slaver_ADD。
{
ISP_CONTR=ENABLE_ISP;
ISP_CMD=0x01;
ISP_ADDRH=DATA_FLASH_START_ADDRESSH;
ISP_ADDRL=DATA_FLASH_START_ADDRESSL;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
// _nop_();
EA=1; //可否放在return之后?//LED顯示是否會有問題?//_nop_();不能加?
ISP_DISABLE(); //可否放在return之后?---編譯可以通過,實際使用要調.
return(ISP_DATA);
}
void section_erase(void)
//讀數據出錯時調用,之后編程,然后再讀?
//
{
ISP_CONTR=ENABLE_ISP;
ISP_CMD=0x03;
ISP_ADDRH=DATA_FLASH_START_ADDRESSH;
ISP_ADDRL=DATA_FLASH_START_ADDRESSL;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
// _nop_();
EA=1;
ISP_DISABLE();
// return(ISP_DATA);
}
void byte_program(unsigned char m)
//獲得新的Slaver_ADD 應該寫入DATA flash。
//如果相同則不寫入,要做判斷。
//應該在主程序執行,并更改變量 slaver_ADD。
//是否每次寫都erase 一下:否則如何判斷讀出數據有錯?COM_FAIL?
{
section_erase();
ISP_DATA=m;
ISP_CONTR=ENABLE_ISP;
ISP_CMD=0x02;
ISP_ADDRH=DATA_FLASH_START_ADDRESSH;
ISP_ADDRL=DATA_FLASH_START_ADDRESSL;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
// _nop_();
EA=1;
ISP_DISABLE();
// return(ISP_DATA);
}
//主程序
/*
main(void)
{
time0_init();
UART_init();
COM_status=0xff;
do
{
if(point==0 && UART_nogetOKdata_flag==0)//串口程序結束時要加UART_nogetOKdata_flag=1
{
sentdata();}
if(point==6 && COM_Status==3)
{
// if (COM_Status==3)
sentdata();//
// else
// {;}
}
else if(point==6 && COM_Status==4)
{
slaver_ADD=new_ADD;
}
else if(point==12 && COM_Status==2)
{
// if(COM_Status==2)
sentdata();
// else
// {;}
}
else
{;}
}while(1);
}
*/
main(void)
{
SCON=0x52;
TMOD=0x20;
TH1=0xf3;
TR1=1;
section_erase();
byte_program(0x05);//ISP 功能測試函數,可放在程序UART_init和time0_init 之后
if(byte_read()==0x05)
// {
printf("hello I am keillll. \n" );
// }
// while(1);
}
//“uncalled segment,ignored for overlay process” 的警告 在使用之前定義的define 后減少一111111個主程序多用一個定義的函數,就少一個
//“missing function prototype --warning ,requires ANSI-style prototype --error” 當一個函數未定義時出現
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -