Thursday, July 16, 2015

bài 2 : lập trình GPIO với STM8S003F3P6

Để làm việc với các chân vào ra của stm8 thì chúng ta cần quan tâm đến 5 thanh ghi :


Data Direction Register   : Thanh ghi cấu hình vào ra của PORT (input/output)
Nếu 1 bit trong thanh ghi này được set lên 1 thì pin tương ứng là output, và ngược lại nếu =0 thì sẽ là input
PD_ODR = 0; // Toàn bộ các chân trong port D là output
PD_DDR_DDR0 = 1; // đặt pin 0 của portD là output
PD_DDR_DDR1 = 1; // ................
PD_DDR_DDR2 = 0; // đặt chân 2 của portD là input

Px_CR1 & PxCR2 – Control Register 1 and 2

Px_CR1 & Px_CR2 là 2 thanh ghi điều khiển của PORTx. (x=A<B<C<D..)
RegisterModeValueDescription
CR1Input0Floating input
CR1Input1Input with pull-up
CR1Output0Open drain
CR1Output1Push-Pull
CR2Input0Interrupt disabled
CR2Input1Interrupt enabled
CR2Output0Output up to 2 MHz.
CR2Output1Output up to 10 MHz

Floating input : là đầu vào thả nổi
Input with pull-up : là đầu vào có điện trở treo trong
open drain : đầu ra hở
Push-Pull : đầu ra có trở treo
Interrupt disable: vô hiệu ngắt
interrupt enable : kích hoạt ngắt
Output up to 2 Mhz : tần số đầu ra là 2 Mhz
Ví dụ :
Px_CR1_C1y =  1; // push-pull

Px_CR2_C2y = 0;  // 2Mhz
trong đó x là A,D,B,C.. là tên Port
y = 0->7;
Tôi viết 1 ví dụ cho các bạn dễ hiểu như sau. Pin3 của PortD sẽ nhấp nháp liên tục
 #include <intrinsics.h>#include <iostm8s003f3.h> 
void Delay(int nCount) 
{   
while (nCount != 0)  
{    nCount--;  
} 
}

////  Main program loop.//
void main() 
{ 
PD_DDR_DDR3 = 1; //PD3 output 
PD_CR1_C13 =  1; // push-pull 
PD_CR2_C23 = 0;  // 2Mhz
    while (1)    
{      
PD_ODR_ODR3 = !PD_ODR_ODR3; //đảo trạng thái của pin3      
Delay(0xffff);    
} 
}

Các linh kiện cần có :
1 board STM8 tự chế , 
1 tụ C=1u
1 trở 220 ôm
1 led
và 1 nguồn 5V

Sơ đồ mạch
Cực đơn giản để bạn có thể bắt đầu với 1 vi điều khiển mạnh và giá rẻ như STM8. 
Nếu không làm được board các bạn cứ liên hệ với tôi

4 comments:

  1. PD_DDR_DDR0 = 1 mình k hiểu câu lệnh này lắm,PD là chỉ cổng D vậy DDR có tác dụng gì?

    ReplyDelete
    Replies
    1. set bit 0 của thanh ghi DDR của port PD

      Delete
    2. Mình không hiểu lắm về thanh ghi DDR,nó khác thanh ghi CR1,CR2,ORC chỗ nào vậy?

      Delete
  2. DDR là thanh ghi chỉ hướng dữ liệu, giống TRIS của pic. Còn cr1 là thanh ghi điều khiển

    ReplyDelete