Hình 5-1 Lưu đồ thuật toán chương trình MONITOR cho PIC MASTER
5.1.2. Mã nguồn của một số MODUL
+ Khởi tạo giao tiếp với LCD
Việc khởi tạo giao tiếp giữa PIC MASTER và LCD phải tuân thủ theo đúng nguyên tắc, quy định của nhà sản xuất (Đã được trình bày ở chương 2).
Đoạn mã nguồn dưới đây sẽ tiến hành khởi tạo PIC MASTER và LCD theo giao tiếp 4 BIT dữ liệu.
//==========================================================
BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xf, 1, 6}; struct lcd_PIN_map const LCD_WRITE = {0,0,0,0,0};
//========================================================== void lcd_send_nibble( BYTE n )
{ lcd.data = n; delay_cycles(1); lcd.enable = 1; delay_us(2); lcd.enable = 0; } //========================================================== void lcd_send_BYTE( BYTE address, BYTE n )
{ lcd.rs = 0; while ( BIT_test(lcd_read_BYTE(),7) ) ; lcd.rs = address; delay_cycles(1); lcd.rw = 0; delay_cycles(1); lcd.enable = 0; lcd_send_nibble(n >> 4); lcd_send_nibble(n & 0xf); } //========================================================== void lcd_init() { BYTE i;
set_tris_d(LCD_WRITE); // đặt PORT về chế độ xuất dữ liệu ra LCD
lcd.rs = 0; //chân RS của LCD = 0.
lcd.enable = 0; //chân Enable của LCD=0
delay_ms(15); //đợi 15 ms
for(i=1;i<=3;++i) //Đưa LCD về giao thức 8 BIT 3 lần
{lcd_send_nibble(3); //B7-B4=0011.
delay_ms(5); }
lcd_send_nibble(2); // Chuyển LCD về chế độ 4 BIT B7-B4=0010
for(i=0;i<=3;++i) //Gửi các chuỗi khởi tạo tiếp theo đến LCD
{
lcd_send_BYTE(0, LCD_INIT_STRING[i]); }
}
+ Khởi tạo EPROM 65535 BYTES
Việc khởi tạo EPROM được tiến hành đơn giản hơn, so với khởi tạo LCD. Đầu tiên chúng ta phải xác định chân của PIC MASTER nối với EPROM, kèm theo chức năng của các chân.
Sau đó phải đặt chân của PIC MASTER giao tiếp với EPROM, thành dạng ở mức cao như một cực thu hở ( Thiết lập ngõ vào trở kháng cao).
Đoạn mã nguồn dưới đây, sẽ khởi tạo EPROM 65535 BYTES làm việc với PIC MASTER theo giao tiếp I2C. Với PIN B0 của PIC MASTER được chỉ định là chân SDA, PIN B1 được chỉ định là chân SCL.
//========================================================== #define EEPROM_SDA PIN_B0
#define EEPROM_SCL PIN_B1 #define EEPROM_ADDRESS long int #define EEPROM_SIZE 65535 void init_ext_eepROM()
{
output_float(EEPROM_SCL);
output_float(EEPROM_SDA); }
+ Khởi tạo giao tiếp I2C giữa PIC MASTER và các PIC SLAVE
Khởi tạo giao tiếp I2C giữa PIC MASTER và các PIC SLAVE, do cả hai PIC MASTER và PIC SLAVE thực hiện.
Đầu tiên phải khai báo quyền điều khiển BUS là MASTER hay SLAVE, các PIN dùng cho giao tiếp I2C, sau đó là đến các tham số khác như:
- Tốc độ truyền DATA.
- Có sử dụng MODUL giao tiếp I2C có sẵn trong PIC hay không.
Đoạn mã lệnh dưới đây dùng để khai báo giao tiếp I2C, với 1 PIC MASTER và 4 PIC SLAVE.
//==================Khai báo ở PIC MASTER====================== #use i2c (MASTER,SDA=PIN_B0,SCL=PIN_B1,FORCE_HW)
// MASTER = chế độ MASTER.
// SDA=PIN_B0 = PIN B0 là chân SDA (Truyền, nhận dữ liệu) // SCL=PIN_B1 = PIN B1 là chân duy trì xung Clock)
//Tốc độ ngầm định
// FORCE_HW = Sử dụng MODUL I2C tiếp hợp sẵn trong PIC.
//===================Khai bao ở các PIC
SLAVE====================
#use i2c(SLAVE, SDA=PIN_B0, SCL=PIN_B1, address=0x40) //SLAVE = chế độ SLAVE
// SDA=PIN_B0 = PIN B0 là chân SDA (Truyền, nhận dữ liệu) // SCL=PIN_B1 = PIN B1 là chân duy trì xung Clock)
// address=0x40 = địa chỉ là 0x40.