使用STC15W4K系列微控制器需要注意I/O口的一些問題
在STC15W4K系列微控制器中,與PWM2—PWM7相關的12個I/O口[P3.7/PWM2,P2.1/PWM3,P2.2/PWM4,P2.3/PWM5,P1.6/PWM6,P1.7/PWM7,P2.7/PWM2_2,P4.5/PWM3_2,P4.4/PWM4_2,P4.2/PWM5_2,P0.7/PWM6_2,P0.6/PWM7_2],上電覆位後是高阻輸入狀態,要對外能輸出,要軟體將其改為強推輓輸出或準雙向口/弱上拉,與PWM2—PWM7相關的I/O口引腳如下:
配置I/O口為強推輓輸出、準雙向口/弱上拉、高阻輸入和開漏狀態如下表格所示:
根據上述微控制器I/O口引腳和I/O設定狀態表格,用P2口作例子,
(1)將P2埠與PWM相關的I/O配置為強推輓輸出用C語言表示如下:
P2M1 = 0x00; //0000 0000B
P2M0 = 0x9E; //1001 1110B
(2)將P2埠與PWM相關的I/O配置為準雙向口/弱上拉用C語言表示如下:
P2M1 = 0x00; //0000 0000B
P2M0 = 0x00; //0000 0000B
(3)將P2埠與PWM相關的I/O配置為高阻輸入用C語言表示如下:
P2M1 = 0x9E; //1001 1110B
P2M0 = 0x00; //0000 0000B
(4)將P2埠與PWM相關的I/O配置為開漏用C語言表示如下:
P2M1 = 0x9E; //1001 1110B
P2M0 = 0x9E; //1001 1110B
注:以上STC15W4K系列微控制器引腳圖和I/O設定狀態表格是從STC官方下載的STC15W4K系列微控制器的資料手冊上擷取的。
如果想要讓STC15W4K系列微控制器的所有I/O口與8051微控制器的I/O一樣,只要把STC15W4K系列微控制器的I/O口配置為準雙向口/弱上拉即可,我們將上面的STC15W4K系列微控制器涉及到的所有埠都配置為準雙向口/弱上拉:
P0埠的8個I/O配置為準雙向口/弱上拉:P0M1 = 0x00; //0000 0000B
P0M0 = 0x00; //0000 0000B
P1埠的8個I/O配置為準雙向口/弱上拉:P1M1 = 0x00; //0000 0000B
P1M0 = 0x00; //0000 0000B
P2埠的8個I/O配置為準雙向口/弱上拉:P2M1 = 0x00; //0000 0000B
P2M0 = 0x00; //0000 0000B
P3埠的8個I/O配置為準雙向口/弱上拉:P3M1 = 0x00; //0000 0000B
P3M0 = 0x00; //0000 0000B
P4埠的8個I/O配置為準雙向口/弱上拉:P4M1 = 0x00; //0000 0000B
P4M0 = 0x00; //0000 0000B
P5埠的8個I/O配置為準雙向口/弱上拉:P5M1 = 0x00; //0000 0000B
P5M0 = 0x00; //0000 0000B
我們想用P2埠點亮LED,在開發程式中可以這樣寫:#include <STC15.h>
sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3;
sbit LED4 = P2^4;
sbit LED5 = P2^5;
sbit LED6 = P2^6;
sbit LED7 = P2^7;
void SetPortMode(unsigned char port)
{
switch(port){
case 0:
P0M1 = 0x00;
P0M0 = 0x00;
break;
case 1:
P1M1 = 0x00;
P1M0 = 0x00;
break;
case 2:
P2M1 = 0x00;
P2M0 = 0x00;
break;
case 3:
P3M1 = 0x00;
P3M0 = 0x00;
break;
case 4:
P4M1 = 0x00;
P4M0 = 0x00;
break;
case 5:
P5M1 = 0x00;
P5M0 = 0x00;
break;
}
}
int main(void)
{
SetPortMode(2);
P2 = 0;
LED0 = 0;
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
while(1);
}