❶ stc單片機如何將IO口設為強推挽輸出C程序怎麼設置比如我設P1.1口為強推挽輸出高手指教一下
1、首先在電腦上打開keil軟體,如下圖所示。
❷ 單片機C語言程序里P0M0,P0M1等等的是什麼意思呢
你看到的程序應該是用在STC單片機上的,因為STC單片機的P0,P1,P2,P3口可以設置成四種工作模式,即開機處於的准雙向口,推挽輸出,高阻輸入,開漏輸出這四種。如果需要設置成其餘的3種,就要通過對各自配置寄存器來設置的,你的P0M0,P0M1就對P0進行設置的,同樣有P1M0,P1M1是對P1口進行設置的,以此類推。
❸ stc單片機c語言編程
任何變數名不要命名為a或acc,或避免與51的保留寄存器發生沖突。
❹ STC單片機的秒錶設計c語言怎麼寫,要求第一次按下STOP開始計時,當再次按下STOP時,秒錶為計
STOP按下一次K++;
if(CLEAR==0) {K=0;T=0;} 這個要寫在計時器中斷程序里
if(K==0)不計時
if(K==1)啟動計時器開始計時 設計時時間為T
if(K==2)計數器停止計時 這三行寫在主程序死循環里
再加上顯示程序就可以了
❺ stc單片機與avr單片機C語句有什麼不同
(1)STC單片機支持微操作,而AVR單片機不支持微操作指令,對某一為操作的話,需要通過,「按位與、按位或」C語言指令來完成;
(2)STC單片機的每個引腳只有兩個寄存器,而AVR單片機每個引腳都有三個寄存器,因此每次對IO口操作,都學要對引腳寄存器從新配置,這也是兩單片機的不同
❻ 如何用IO口模擬I2C來實現兩個STC單片機之間的通訊,求C語言寫法
這是我寫的模擬程序,只有一個發送函數和一個接收函數,EP為接收標志位,發送沒有標志位,通過外部中斷來發送起始信號,無應答與非應答,無結束信號,實測可以正常收發數據
#ifndef _IOPORTSEND_H__
#define _IOPORTSEND_H__
#include<reg52.h>
unsigned char DAT,EP=0;//可以把DAT當作串口中的SBUF,主機發送完後接收機從DAT提取數據
sbit flag = P3^3;//外部中斷口
sbit ok = P2^7;//起始信號發送口
sbit PCL = P2^6;//時鍾線
sbit PDA = P2^5;//數據線
void delay() //延時函數控制波特率
{
unsigned char a,b;
for(b=3;b>0;b--)
for(a=13;a>0;a--);
}
void PortInit()//中斷配置
{
EA=1;
EX1=1;
IT1=1;
}
void SendPort(unsigned char dat)//發送函數
{
unsigned char i;
PCL=0;
ok=1;//通過ok來啟動接收機的中斷
ok=0;
for(i=0;i<8;i++)//開始發送數據
{
PCL=0;
delay();
if(dat&0x80)
PDA=1;
else
PDA=0;
PCL=1;
delay();
dat<<=1;
}
PCL=0;
delay();
ok=1;//ok置1以便下次發送時啟動中斷
PCL=1;//發送完畢釋放時鍾線與數據線
PDA=1;
}
void ReadPort()interrupt 2//接收函數,在中斷函數中接收數據
{
unsigned char i;
static unsigned int b;
PCL=1;
PDA=1;//防止接收機的PCL口和PDA口影響數據的接收
for(i=0;i<8;i++)//開始接收數據
{
DAT<<=1;
while(PCL==0);
b=0;
while(PCL==1)
{
b++;
if(b==1)
if(PDA)
DAT|=0x01;
}
}
EP=1;//接收完畢後置EP為1,需要在其他函數中清零
}
#endif
❼ 跪求:STC單片機C語言編程方面的書籍 各位大哥大姐,看到了就幫忙回復一下吧
有一本叫做《手把手教你學單片機》,挺適合初級人員的哦!
後面還有郭天祥的《新概念51單片機C語言教程》,並且那個視屏特別好,講的很仔細,假如是一個入門者,相當推薦!!!
其他的,倒沒什麼了,樓主真心想學習好,就多做吧,我們學校都是這種模式,一題目練習新手的!
❽ 用c語言為單片機STC12C2052寫一段簡單的延時程序!
下面幾個是單片機的延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。
軟體延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV
72H,#100
LOOP3:MOV
71H,#100
LOOP1:MOV
70H,#47
LOOP0:DJNZ
70H,LOOP0
NOP
DJNZ
71H,LOOP1
MOV
70H,#46
LOOP2:DJNZ
70H,LOOP2
NOP
DJNZ
72H,LOOP3
MOV
70H,#48
LOOP4:DJNZ
70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延時0.5秒
AJMP
DELAY
DELAY2:MOV
R7,#14H
;;晶振12MHZ,延時1秒
DELAY:CLR
EX0
MOV
TMOD,#01H
;設置定時器的工作方式為方式1
MOV
TL0,#0B0H
;給定時器設置計數初始值
MOV
TH0,#3CH
SETB
TR0
;開啟定時器
HERE:JBC
TF0,NEXT1
SJMP
HERE
NEXT1:MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
R7,HERE
CLR
TR0
;定時器要軟體清零
SETB
EX0
RET
C語言延時程序:
10ms延時子程序(12MHZ)
void
delay10ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序:
(12MHZ)
void
delay500ms(void)
{
unsigned
char
i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
下面是用了8.0000MHZ的晶振的幾個延時程序(用定時0的工作模式1):
(1)延時0.9MS
void
delay_0_9ms(void)
{
TMOD=0x01;
/*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0xa8;
TR0=1;
/*啟動定時器*/
while(TF0==0);
TR0=0;
}
(2)延時1MS
void
delay_1ms(void)
{
TMOD=0x01;
/*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0x65;
TR0=1;
/*啟動定時器*/
while(TF0==0);
TR0=0;
}
(3)延時4.5ms
void
delay_4_5ms(void)
{
TMOD=0x01;
/*定時器0工作在模式1下(16位計數器)*/
TH0=0xf4;
TL0=0x48;
TR0=1;
/*啟動定時器*/
while(TF0==0);
TR0=0;
}
❾ STC 89C51,單片機C語言程序,P10輸出PWM方波
串口還是P10?我下面貼出P10輸出PWM的產生代碼,希望對你能有幫助。
#include
# t 10000/100 //修改10000更改周期 單位us T(us)=10^6/f(hz) 至少10000us
# Duty_cycle 10 ///更改此更改占空比 0-100
unsigned char percent=0;
sbit work_pin P1^0;
void Timer0Init() //定時器0初始化
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0xff;
TL0=0x9c;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
void PWM_work() interrupt 1
{
TH0=0xff;
TL0=0c9c;
percent++;
if(percent<=Duty_cycle*t/100)
{
work_pin=1;
if(percent>t) percent=0;
}
else work_pin=0;
}
void main()
{
Timer0Init();
while(1);
}
❿ STC51單片機C語言開啟蜂鳴器
#include<reg52.h>
sbitbeep=P0^4;
voidmain()
{
beep=0;
while(1);
}
試試這個怎樣,單片機在執行完程序之後會回到初始狀態,然後再重新執行程序,所以蜂鳴器就會反復的開和關,聽起來聲音會小很多;加個while(1)死循環,讓程序一直保持在beep=0的狀態。