久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STC15W408AS單片機(jī)串口通訊帶串口移植功能+ADC采集+定時器+EEPROM綜合程序
[打印本頁]
作者:
zhangxinchun
時間:
2023-7-11 13:07
標(biāo)題:
STC15W408AS單片機(jī)串口通訊帶串口移植功能+ADC采集+定時器+EEPROM綜合程序
【聲明】此程序僅用于學(xué)習(xí)與參考!
*********************************************************************/
#include<STC15W408AS.h>
#include<math.h> //計算小數(shù)點(diǎn)的頭文件
#include <intrins.h> //用nop函數(shù)延時的頭文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int //宏定義無符號整型
/*數(shù)據(jù)類型定義*/
typedef signed char int8;
typedef signed int int16;
typedef signed long int32;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
#define S1_S0 0x40 //P_SW3.6
#define S1_S1 0x80 //P_SW3.7
#define ENABLE_IAP 0x83 //系統(tǒng)工作時鐘<12MHz 時,對IAP_CONTR 寄存器設(shè)置此值
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
#define ENABLE_IAP 0x83//SYSCLK<12MH
#define IAP_ADDRESS 0x0000 //存儲地址
#define FOSC 11059200L
#define BAUD 9600
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標(biāo)志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個時鐘
#define ADC_SPEEDL 0x20 //360個時鐘
#define ADC_SPEEDH 0x40 //180個時鐘
#define ADC_SPEEDHH 0x60 //90個時鐘
uint AD_H=0,AD_L=0,AD_Dat=0;
/*定義遙控引腳*/
sbit IN1 = P1^2; /*下*/
sbit IN2 = P1^3; /*上*/
sbit IN3 = P1^4; /*西*/
sbit IN4 = P1^5; /*東*/
sbit IN5 = P1^6; /*北*/
sbit IN6 = P1^7; /*南*/
sbit IN7 = P5^4; /*2*/
sbit IN8 = P5^5; /*1*/
/*AD采集引腳*/
sbit ADC1=P1^1;//電池電壓檢測
/*供電自鎖引腳*/
sbit gong_dian=P1^0;//電池電壓檢測
/*指示燈引腳*/
sbit RUN=P3^2;//運(yùn)行指示燈
sbit dian_chi=P3^3;//電池指示燈
/*控制引腳*/
sbit MD0=P3^4;//工作模式
sbit MD1=P3^5;//工作模式
uchar DATE=0x00;//遙控器按鍵
uchar add=0X01; //遙控器地址
bit write=0;
bit flag_zx=0;
uchar sendBuf[10]; //發(fā)送緩沖區(qū)
uchar receBuf[10]; //接收緩沖區(qū)
uchar r=0;//串口接收數(shù)據(jù)計數(shù)值
uint tcnt=0;//定時器時間計數(shù)值
uchar sec=0;//定時器時間計數(shù)值
uchar k=100;//延時函數(shù)時間函數(shù)
bit bz1=0;//輸入按鍵標(biāo)志
bit bz2=0;//輸入按鍵標(biāo)志
bit bz3=0;//輸入按鍵標(biāo)志
bit bz4=0;//輸入按鍵標(biāo)志
bit bz5=0;//輸入按鍵標(biāo)志
bit bz6=0;//輸入按鍵標(biāo)志
bit bz7=0;//輸入按鍵標(biāo)志
bit bz8=0;//輸入按鍵標(biāo)志
bit dian_liang_bj=0;//電量報警
bit fa_she_bj=0;//數(shù)據(jù)發(fā)射標(biāo)志
uchar adc1=0;//AD采集的數(shù)據(jù)值
/********************************************************************
定義 ISP/IAP/EEPROM 命令
*********************************************************************/
void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
uint8 IapReadByte(uint16 addr);//讀數(shù)據(jù)
void IapProgramByte(uint16 addr, uint8 dat);//寫數(shù)據(jù)
void IapEraseSector(uint16 addr);//擦除數(shù)據(jù)
void KEY1();//模式1函數(shù)
void delay(uchar t);//擦除數(shù)據(jù)
void clear_receBuf();//清空發(fā)送緩沖區(qū)
void send_date1();//數(shù)據(jù)函數(shù)
void senduart1();//發(fā)送函數(shù)
void InitADC();//AD轉(zhuǎn)換初始化程序
uchar ADCRead(uchar px); //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
/********************************************************************
AD轉(zhuǎn)換初始化程序
*********************************************************************/
void InitADC()//AD轉(zhuǎn)換初始化程序
{
P1ASF = 0x02; //設(shè)置P1.1口AD轉(zhuǎn)換,必須加// P1M0=0X1E;
ADC_RES = 0; //AD數(shù)據(jù)寄存器清空
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開AD電源,轉(zhuǎn)換周期210
_nop_(); //延時一個機(jī)器周期
_nop_();
_nop_(); //延時一個機(jī)器周期
}
/********************************************************************
AD轉(zhuǎn)換控制程序
*********************************************************************/
uchar ADCRead(uchar px) //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開始轉(zhuǎn)換
_nop_(); //延時一個機(jī)器周期
_nop_(); //延時一個機(jī)器周期
_nop_(); //延時一個機(jī)器周期
_nop_(); //延時一個機(jī)器周期
while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
ADC_CONTR &= ~ADC_FLAG; //關(guān)閉AD轉(zhuǎn)換
// AD_H = ADC_RES; // 修改的 注:把高8位AD值付給AD_H
// AD_H <<= 2; // 修改的 注:高八位左移2位
// AD_L = ADC_RESL & 0x03; // 修改的 注:取低兩位
// AD_Dat = AD_H | AD_L; // 修改的 注:把高八位和低兩位合并在一起
// AD_Dat = AD_H | AD_L; // 修改的 注:把高八位和低兩位合并在一起
AD_Dat = ADC_RES;
return AD_Dat; //返回數(shù)據(jù)
}
/********************************************************************
延時函數(shù)
*********************************************************************/
void delay(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
{
for(j=130;j>0;j--);
{ ;
}
}
}
/****************數(shù)據(jù)函數(shù)*********************/
void send_date1()//數(shù)據(jù)函數(shù)
{
adc1=ADCRead(1);
sendBuf[0]=0xAA;
sendBuf[1]=add;
sendBuf[2]=adc1;
sendBuf[3]=DATE;
sendBuf[4]=0xBB;
}
/****************發(fā)送函數(shù)*********************/
void senduart1()//發(fā)送函數(shù)
{
SBUF=sendBuf[0];while(!TI);TI=0;
SBUF=sendBuf[1];while(!TI);TI=0;
SBUF=sendBuf[2];while(!TI);TI=0;
SBUF=sendBuf[3];while(!TI);TI=0;
SBUF=sendBuf[4];while(!TI);TI=0;
}
/********************************************************************
模式1函數(shù)
*********************************************************************/
void KEY1()
{
//if(gong_dian==0){gong_dian=0;}
if((IN1==0)&&(bz1==0)){delay(k);if((IN1==0)&&(bz1==0)){fa_she_bj=1;DATE=0x01;send_date1();senduart1();bz1=1;}}if((IN1==1)&&(bz1==1)){delay(k);if((IN1==1)&&(bz1==1)){bz1=0;fa_she_bj=0;}}//輸入按鍵
if((IN2==0)&&(bz2==0)){delay(k);if((IN2==0)&&(bz2==0)){fa_she_bj=1;DATE=0x02;send_date1();senduart1();bz2=1;}}if((IN2==1)&&(bz2==1)){delay(k);if((IN2==1)&&(bz2==1)){bz2=0;fa_she_bj=0;}}//輸入按鍵
if((IN3==0)&&(bz3==0)){delay(k);if((IN3==0)&&(bz3==0)){fa_she_bj=1;DATE=0x03;send_date1();senduart1();bz3=1;}}if((IN3==1)&&(bz3==1)){delay(k);if((IN3==1)&&(bz3==1)){bz3=0;fa_she_bj=0;}}//輸入按鍵
if((IN4==0)&&(bz4==0)){delay(k);if((IN4==0)&&(bz4==0)){fa_she_bj=1;DATE=0x04;send_date1();senduart1();bz4=1;}}if((IN4==1)&&(bz4==1)){delay(k);if((IN4==1)&&(bz4==1)){bz4=0;fa_she_bj=0;}}//輸入按鍵
if((IN5==0)&&(bz5==0)){delay(k);if((IN5==0)&&(bz5==0)){fa_she_bj=1;DATE=0x05;send_date1();senduart1();bz5=1;}}if((IN5==1)&&(bz5==1)){delay(k);if((IN5==1)&&(bz5==1)){bz5=0;fa_she_bj=0;}}//輸入按鍵
if((IN6==0)&&(bz6==0)){delay(k);if((IN6==0)&&(bz6==0)){fa_she_bj=1;DATE=0x06;send_date1();senduart1();bz6=1;}}if((IN6==1)&&(bz6==1)){delay(k);if((IN6==1)&&(bz6==1)){bz6=0;fa_she_bj=0;}}//輸入按鍵
if((IN7==0)&&(bz7==0)){delay(k);if((IN7==0)&&(bz7==0)){fa_she_bj=1;DATE=0x07;send_date1();senduart1();bz7=1;}}if((IN7==1)&&(bz7==1)){delay(k);if((IN7==1)&&(bz7==1)){bz7=0;fa_she_bj=0;}}//輸入按鍵
if((IN8==0)&&(bz8==0)){delay(k);if((IN8==0)&&(bz8==0)){fa_she_bj=1;DATE=0x08;send_date1();senduart1();bz8=1;}}if((IN8==1)&&(bz8==1)){delay(k);if((IN8==1)&&(bz8==1)){bz8=0;fa_she_bj=0;}}//輸入按鍵
//if((IN1==0)||(IN2==0)||(IN3==0)||(IN4==0)||(IN5==0)||(IN6==0)||(IN7==0)||(IN8==0)){RUN=0;}
if(dian_liang_bj==0)
{
if((IN1==1)&&(IN2==1)&&(IN3==1)&&(IN4==1)&&(IN5==1)&&(IN6==1)&&(IN7==1)&&(IN8==1)){RUN=0;}//電量正常時綠燈亮
}
else{RUN=1;dian_chi;sec=0;}//當(dāng)電池電量低時,紅燈亮
}
/********************************************************************
定時中斷服務(wù)函數(shù)
*********************************************************************/
void t0(void) interrupt 1 using 0 //定時中斷服務(wù)函數(shù)
{
tcnt++; //每過250ust tcnt 加一
if(tcnt==400) //計滿400 次(1/10 秒)時
{
tcnt=0; //重新再計
sec++;
if(dian_liang_bj==0){if(fa_she_bj==1){if(sec>=1){RUN=!RUN;sec=0;}}}
if(dian_liang_bj==1){if(sec>=20){dian_chi=!dian_chi;sec=0;}}
//if(sec==10){RUN=!RUN;sec=0;}
//if(sec>=20){dian_chi=!dian_chi;sec=0;}
}
}
/*****************清空發(fā)送緩沖區(qū)*************************/
void clear_receBuf()
{
uchar i;
for(i=0;i<5;i++)
{
receBuf[i]=0;
}
}
/********************************************************************
主函數(shù)
*********************************************************************/
void main()
{
P1M0 = 0x00; P1M1 = 0x02; //IO定義
P3M0 = 0x00; P3M1 = 0x00; //IO定義
SCON = 0x50;
T2L = (65536 - (FOSC/4/BAUD));
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14;
AUXR |= 0x01;
ES = 1;
EA = 1;
add= IapReadByte(0x01);//讀取存儲的值
if(add>=100){add=1;}
//sj2= IapReadByte(0x02);//讀取存儲的值
TMOD=0x02; //定時器工作在方式2
TH0=0x06; //對TH0 TL0 賦值
TL0=0x06;
TR0=1; //開始定時
ET0=1;
EA=1;
/*串口移植*/
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=1 S1_S1=0
ACC |= S1_S0; //(P3.6/RxD_2, P3.7/TxD_2)
P_SW1 = ACC;
InitADC();//AD轉(zhuǎn)換初始化程序
sec=0;
MD0 = 0;//工作模式
MD1 = 0;//工作模式
gong_dian=0;
while(1)
{
KEY1();//按鍵函數(shù)
if(write==1) //修改板子地址
{
write=0;
add=1;
IapEraseSector(0); //擦除扇區(qū)
IapProgramByte(0x01,add);//寫入新的地址
//IapProgramByte(0x02,sj2);//寫入新的地址
}
}
}
/********************************************************************
串口中斷函數(shù)
*********************************************************************/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI=0; //接收標(biāo)志清零
receBuf[r++&0x0F]=SBUF; //把接受的數(shù)據(jù)存儲到BUT數(shù)組中
if(receBuf[0]!=0xaa){r=0;}
if(r>=5)
{ r=0;
flag_zx=1;
}
}
if(flag_zx==1)
{
flag_zx=0;
if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
{
write=1;
sendBuf[0]=0xaa;
sendBuf[1]=add;
sendBuf[2]=0x00;
sendBuf[3]=0x00;
sendBuf[4]=0xbb;
senduart1();
}
if((receBuf[0]==0xaa)&&(receBuf[1]==0xff)&&(receBuf[2]==0xff)&&(receBuf[3]==0xff)&&(receBuf[4]==0xbb))
{
sendBuf[0]=0xaa;
sendBuf[1]=add;
sendBuf[2]=0xff;
sendBuf[3]=0xff;
sendBuf[4]=0xbb;
senduart1();
}
clear_receBuf();
}
}
/********************************************************************
結(jié)束
*********************************************************************/
void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
IAP_CONTR = 0; //
IAP_CMD = 0; //
IAP_TRIG = 0; //
IAP_ADDRH = 0x80; //
IAP_ADDRL = 0; //
}
uint8 IapReadByte(uint16 addr){//讀數(shù)據(jù)
uint8 dat;
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_READ;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
dat = IAP_DATA;
IapIdle();
return dat;
}
void IapProgramByte(uint16 addr, uint8 dat){//寫數(shù)據(jù)
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_PROGRAM;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_DATA = dat;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
IapIdle();
}
void IapEraseSector(uint16 addr){//擦除數(shù)據(jù)
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_ERASE;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
IapIdle();
}
/********************************************************************
結(jié)束
*********************************************************************/
復(fù)制代碼
STC15W408AS 串口 ADC 定時器 EEPROM.rar
2023-7-11 13:07 上傳
點(diǎn)擊文件名下載附件
57.87 KB, 下載次數(shù): 121
Keil代碼
作者:
jovew
時間:
2023-7-12 07:35
好東西! 只是還沒有看明白。學(xué)習(xí)之。
作者:
13869300
時間:
2023-10-28 19:42
好東西,正在學(xué)習(xí)下載看看
作者:
STC新未來
時間:
2023-10-30 09:53
感謝樓主的精彩分享,非常的權(quán)威!后續(xù)若需要更多的案例可參考ISP軟件上的范例程序
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲乱淫
|
荤话粗俗h高h重口
|
少妇高潮露脸国语对白
|
亚洲综合视频在线观看
|
国产做受入口竹菊
|
99久久精品国产一区二区成人
|
国产午夜激情
|
日韩欧美综合
|
五月天久久
|
国产精品成人免费精品自在线观看
|
色网站在线观看
|
亚洲欧美视频
|
欧美日韩色
|
欧美黄色网
|
伊人久久艹
|
久久av资源
|
国产精品乱码一区二区视频
|
成人福利在线观看
|
婷婷午夜天
|
三级在线观看视频
|
岛国av噜噜噜久久久狠狠av
|
婷婷99
|
国产一区二区在线播放
|
9.1成人免费看片
|
国产黄色免费视频
|
97caoporn
|
国产精品成人免费视频
|
1级黄色片
|
国产免费久久
|
欧洲一区二区
|
精品一区二区三区在线观看
|
日本一区二区三区在线视频
|
成人动态视频
|
怡红院亚洲
|
www午夜
|
日韩综合久久
|
亚洲超碰在线
|
97精品国产97久久久久久免费
|
日韩成人免费视频
|
亚洲另类自拍
|
波多野吉衣一二三区乱码
|