『壹』 單片機STC15中這一段EEPROM讀程序是什麼意思讀出來的是什麼值
是讀eeprom裡面的數據,0到5是索引,類似數組的下標,至於讀出來是什麼值還要看放進去的是什麼值,不過這個是16位的,數字信號肯定是0或1的,不過這個既然用了左移8位,應該不是用來當開關用的,不然都沒必要這么高低位組合,直接讀位就好了。航模遙控用的,有可能用來匹配地址碼,還有一些遙控設置用的數據,如陀螺什麼的。
『貳』 C51單片機程序
TH0=0xf6;
TL0=0xff;
上兩行是定時器/計數器T0的初值,因為T0是16位的,所以用TH0表示高八位,TL0表示低八位
TH1=0xfd;
TL1=0xfd;
T1初值
TMOD=0x21;
定時器/計數器模式控制寄存器如圖
GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1
GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。
C/T=0時為定時功能,C/T=1時為計數功能
M0、M1——方式選擇功能
M1M0工作方式計數器模式TMOD(設置定時器模式)
00方式013位計數器TMOD=0x00
01方式116位計數器TMOD=0x01
10方式2自動重裝8位計數器TMOD=0x02
11方式3T0分為2個8位獨立計數器,T1為無中斷重裝8位計數器TMOD=0x03
PCON=0x00;
PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器
WDCON=0x00;清狗
SCON=0x50;
SCON1=0x40;
串口控制寄存器
『叄』 基於stc15單片機的串口通信,發送數據用數碼管顯示(源程序)
#include<reg51.h>
#define uchar unsigned char
uchar code ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共陽級數碼管碼表0-9
uchar time,scanled;
uchar disdat[2];
bit flag=0;
void dischg() //顯示碼轉換
{
disdat[0]=s_dat/10; //秒轉換
disdat[1]=s_dat%10;
}
void t0isr() interrupt 1 //秒計時
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=20)
{
time=0;
s_dat++;
flag=1;
}
}
void t1isr() interrupt 3 //顯示控制
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
an=1;
P0=0xff; //消隱
an=0;
wei=1;
P0=1<<scanled; //位碼
wei=0;
an=1;
P0=disdat[scanled];
an=0;
scanled++;
scanled%=2; //共8位顯示
}
main()
{
TMOD=0x21; //定時器0和1都為模式1
TH0=(65536-50000)/256; //定時器0,50毫秒中斷一次
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
SCON=0x40;
TR1=1;
TR0=0;
ET0=1;
EA=1;
scanled=0;
time=0;
dischg();
while(1)
{
if(flag)
{
flag=0;
SBUF=s_dat;
while(TI==0);
TI=0;
}
}
}
『肆』 以ADC作CMP+的STC15單片機的比較器程序怎樣寫
我看了一下STC15系列的手冊,的確這里語焉不詳,說是PIS=1時就可以用ADCIS[2:0]所選中的通道作為比較器同相輸入端了,然而查遍手冊並無這個位域的相關定義。
就我個人來說,認為這個ADCIS[2:0]有可能指的就是ADC_CONTR寄存器的CHS[2:0]位域。你可以做一下試驗:
① 在ADC_POWER=0的情況下,切換CHS[2:0]的值,看看對應的ADC通道有沒有作為比較器的同相輸入端作用;(理論上我們並不需要ADC模塊真的供電工作,只是借用一下其模塊前端的多路開關而已)
② 如果不行,就將ADC_POWER=1,看看此時的情況如何。
如果都不行,那就只能咨詢STC的技術服務了。
『伍』 15單片機編寫程序,時鍾
#include<reg51.h>
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsigned char sec=0,min=0,hour=12,scanled;
unsigned char key,flashbit,mode,time;
unsigned char disdat[6];
sbit led=P1^0;
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
void flash()
{
switch(flashbit)
{
case 0:break;
case 1:
disdat[4]=0x10;
disdat[5]=0x10;
delay(50);
dischg();
delay(80);
break;
case 2:
disdat[2]=0x10;
disdat[3]=0x10;
delay(50);
dischg();
delay(80);
break;
case 3:
disdat[0]=0x10;
disdat[1]=0x10;
delay(50);
dischg();
delay(80);
break;
default:break;
}
}
void t0isr() interrupt 1//秒計時
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case 0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
hour++;
if(hour>23)hour=0;
}
}
}
break;
case 1:
if(time==20)
{
time=0;
if(sec>0)sec--;
else if(min>0){sec=59;min--;}
else if(hour>0){sec=59;min=59;hour--;}
else {hour=0;min=0;sec=0;}
}
break;
}
dischg();
}
void t1isr() interrupt 3//顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case 4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case 5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=55;
min=59;
hour=23;
flashbit=0;
scanled=0;
time=0;
mode=0;
dischg();
while(1)
{
flash();//閃爍
//led=1;
if((P3&0x0f)!=0x0f){
key=P3&0x0f;
while((P3&0x0f)!=0x0f);
led=0;
delay(10);
key|=0xf0;
switch(~key)
{
case 0x01://p3.1選擇調時、分、秒
TR0=0;
flashbit+=1;
if(flashbit>3){flashbit=0;TR0=1;}
break;
case 0x02://p3.2調數
if(flashbit==0)break;
if(flashbit==1)
{
hour++;
if(hour>99)hour=0;
}
if(flashbit==2)
{
min++;
if(min>59)min=0;
}
if(flashbit==3)
{
sec++;
if(sec>59)sec=0;
}
break;
case 0x04: //選擇正/倒
TR0=0;
mode++;
mode&=0x01;
if(mode==0){sec=0;min=0;hour=0;}
dischg();
break;
case 0x08://啟動/暫停
TR0=~TR0;
break;
default:break;
}
}
}
}