① STC單片機位地址的問題,比如在官網的AD轉換例子中有這樣的定義:ADC_FLAG EQU 10H怎麼是10H啊
你該對著ADC相關的寄存器來看才知道怎麼回事,我看過資料,ADC_FLAG是寄存器ADC_CONTR中的一個標志位,ADC_CONTR中每一位的定義是:
ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
即ADC_FLAG是這寄存器的第5位,其掩碼就是00010000,即0x10。
所以在使用的時候,判斷ADC_FLAG是否為1的方法就是if(ADC_CONTR&ADC_FLAG)或if(ADC_CONTR&0x10),如果判斷結果為0,即ADC_FLAG為0,反之為1。
所以ADC_FLAG EQU 10H定義的是一個掩碼,而不是位地址,你不要搞錯了。
② stc12c5a60s2單片機,如何將串口接收的數據寫入擴展flash
STC單片機的假EEPROM可以用,但不好玩,以下是將從串口接收到的一個位元組數據寫入Flash 0單元的應用實例,供參考。最好在內存中開辟一段緩存,將從串口接收到的數據先置於緩存,之後一並寫入Flash。
IAP_CONTR = 0x83; //設置操作等待時間
IAP_CMD = 0x03; //扇區擦除命令
IAP_ADDRH = 0; //設置高8位地址
IAP_ADDRL = 0; //設置低8位地址
IAP_TRIG = 0x5A; //晶元規定必須的操作
IAP_TRIG = 0xA5; //晶元規定必須的操作
_nop_();
IAP_CMD = 0x02; //設置寫命令
IAP_ADDRH = 0; //設置高8位地址
IAP_ADDRL = 0; //設置低8位地址
IAP_DATA = SBUF; //將串口接收到的一個位元組數據寫入擴展Flash的0x0000H單元
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
IAP_CONTR = 0; //關閉IAP
IAP_CMD = 0; //關閉命令
IAP_TRIG = 0; //清命令觸發寄存器
IAP_ADDRH = 0; //指向非Flash擴展區
IAP_ADDRL = 0;
③ 電流互感器檢測在單片機實例應用
電流互感器P1是一個線圈呀,會產生感應電流的,才叫電流互感器嗎。感應電流通過電阻R1就產生交流電壓。再用二極體D1整流,就得直流電壓,後面的電阻電容都是濾波的,這樣,送到單片機P1.1的是模擬電壓,電壓大小與交流220Ⅴ的電流成正比。
要編程,這應該是STC單片機,P1.1輸入模擬電壓,利用內部A/D電路轉換數字量就行了。所以,編程,一是完成A/D轉換,二是把轉換的數字量換算成交流電流的大小,三是顯示出交流電流值。
④ STC15F2K60S2單片機PWM調光例子
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Key1 =P3^2 ; //PWM值增加鍵
sbit Key3 =P3^3; //PWM值減少鍵
sbit GND=P3^4;
unsigned char PWM=0x7f ; //賦初值
void delay(uchar z);
/*********************************************************/
void main()
{
PWM=0x7f;
GND=0; //P3.4拉低 組成獨立按鍵
P1=0xff;
TMOD=0x21 ;
TH0=0xfc ; //1ms延時常數
TL0=0x66 ; //頻率調節
TH1=PWM ; //脈寬調節
TL1=0 ;
EA=1;
ET0=1;
ET1=1;
TR0=1 ;
while(1)
{
do{
if(PWM!=0xff)
{PWM++ ;delay(10);}
}
while(Key1==0);
do{
if(PWM!=0x02)
{PWM-- ;delay(10);}
}
while(Key3==0);
}
}
/*********************************************************/
// 定時器0中斷服務程序 (頻率)
/*********************************************************/
void timer0() interrupt 1
{
TR1=0 ;
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
P1=0x00 ; //啟動輸出
}
/*********************************************************/
// 定時器1中斷服務程序
/*********************************************************/
void timer1() interrupt 3
{
TR1=0 ;
P1=0xff ; //結束輸出
}
/*********************************************************/
/*********************************************************/
// 延時子程序
/*********************************************************/
void delay(uchar z)
{
uchar i ;
while(z--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}
/*********************************************************/
⑤ STC單片機初始化方法怎麼個初始化在主程序上調用嗎給個實例,謝謝
void main(void)
{
SysInit(); //可以在這初試化
while(1)
{;}
}
⑥ 怎麼以stc單片機為例編寫一個LED指示燈閃爍工程。
我的個天,不能讓你家幫你作作業吧。
給個框架和思路吧。LED二極體正極串一個限流電阻接在+5V電源上,負極接在MCU一個管腳上,如P20,如果燈不夠亮,可以加個三極體放大電流。
程序思路:
main(void)
{
while(1)
{
延時
P20=~P20
//P20取反
點亮和熄滅LED
}
}