Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
131 KB
Nội dung
Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi CHƯƠNG V: GIỚITHIỆU VỀ CCS I Tổng quan CCS I.1 Tại sử dụng CCS? - Sự đời loại vi điều khiển kèm với việc phát triển phần mềm ứng dụng cho việc lập trình cho vi điều khiển Vi điều khiển hiểu làm việc với hai số Ban đầu để việc lập trình cho VĐK làm việc với dãy số - Sau kiến trúc Vi điều khiển ngày phức tạp, số luợng ghi lệnh nhiều lần, việc lập trình với dãy số không phù hợp nữa, đòi hỏi đời ngôn ngữ thay Và ngôn ngữ lập trình Assembly Ở ta không nói nhiều đến Assmebly Sau ngôn ngữ C đời, nhu cầu dụng ngôn ngữ C để thay cho ASM việc mô tả lệnh lập trình cho Vi điều khiển cách ngắn gọn dễ hiểu dẫn đến đời nhiều chương trình soạn thảo biên dịch C cho Vi điều khiển : Keil C, HT-PIC, MikroC, CCS…Đồ án sử dụng CCS để lập trình tính mạnh lập trình đơn giản so với MBLab I.2 GiớithiệuCCSCCS trình biên dịch lập trình ngôn ngữ C cho Vi điều khiển PIC hãng Microchip Chương trình tích hợp trình biên dịch riêng biệt cho dòng PIC khác là: - PCB cho dòng PIC 12 bit opcodes - PCM cho dòng PIC 14 bit opcodes - PCH cho dòng PIC 16 18 bit Tất trình biên dịch tích hợp lại chương trình bao gồm trình soạn thảo văn biên dịch CCS Giống nhiều trình biên dịch C khác cho PIC, CCS giúp cho người sử dụng nắm bắt nhanh vi điều khiển PIC sử dụng PIC dự án Các chương trình điều khiển thực nhanh chóng đạt hiệu cao thông qua việc sử dụng ngôn ngữ lập trình cấp cao – Ngôn ngữ C SVTH:Lê Minh Tâm-Lê Ngọc Thương 83 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi II.Viết chương trình CCS: Đây ví dụ cấu trúc chương trình CCS : #include < 16F877 h > #device PIC6f877 *=16 ADC=10 #use delay(clock=20000000) Int16 a,b; { } #INT_TIMER1 Void xu_ly_ngat_timer ( ) { } Void Main ( ) { } Đầu tiên thị tiền xử lý : # có nhiệm vụ báo cho CCS cần sử dụng chương trình C dùng VXL , có dùng giao tiếp PC qua cổng COM không , có dùng ADC không , có dùng DELAY không , có biên dịch kèm file hay không Các khai báo biến Các hàm ta viết : xu_ly_ADC () , _ Các hàm phục vụ ngắt theo sau thị tiền xử lý cho biết dùng ngắt _Chương trình Một chương trình C viết hàm main () , chúng ngắn đơn giản Nhưng chương trình bắt đầu dài , phức tạp lên chút phải phân chia hàm Các hàm : 1/ Hàm không trả trị Ví dụ : Void xu_ly( ) { Z = x+y ; } Hàm thực lệnh thân hàm , gọi hàm đơn giản viết :Xu_ly( ) ; 1/ Hàm có trả trị Ví dụ : int xu_ly ( int a , int b) { Return (a+b) ; } SVTH:Lê Minh Tâm-Lê Ngọc Thương 84 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi Hàm trả tổng (a+b) sử dụng , ví dụ tính biến e ,f , chương trình sau ( hàm main() ) : Main() { Int e ,f ,g ; e=7 ; f= 4; g = xu_ly(e ,f ); } - Mỗi hàm nên viết để thực chức chuyên biệt Bên hàm gọi hay nhiều hàm khác Cách thức hoạt động viết chương trình C máy tính - Nếu chương trình lớn làm file c dài khó kiểm soát , nên cần phân chia file c file chứa hàm main biên dịch Các file c khác chứa hàm phục vụ chuyên biệt : cho LCD , Trong file cần thêm dòng #include < file x.c > tất hàm cần dùng chứa file x biên dịch vào file hex chung Các ví dụ thư mục CCS có sử dụng LCD chèn dòng #include < lcd.c> gọi hàm file mà không cần phải viết lại điều có nghĩa ta viết file c chứa mã tổng quát dùng chung cho nhiều project , tức tái sử dụng mã , thay phải viết lại chuyên biệt cho project Đây cách làm chuyên nghiệp cho project lớn III Sử dụng biến hàm, cấu trúc lệnh, hiển thị tiền xử lí III.1.Các khai báo sử dụng biến, hằng, mảng Các loại biến sau hỗ trợ : Int1 số bit = true hay false ( hay 1) Int8 số nguyên byte ( bit) Int16 số nguyên 16 bit Int32 số nguyên 32 bit Char ký tự bit Float số thực 32 bit Short mặc định kiểu int1 Byte mặc định kiểu int8 Int mặc định kiểu int8 SVTH:Lê Minh Tâm-Lê Ngọc Thương 85 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi Long mặc định kiểu int16 III.2 Các cấu trúc lệnh ( Statement ) Gồm lệnh : _while (expr) stmt : xét điều kiện trước thực thi biểu thức sau _ stmt while (expr) : thực thi biểu thức xét điều kiện sau _Return : dùng cho hàm có trả trị , không trả trị , cần dùng: return ; ( nghĩa thoát khỏi hàm ) _Break : ngắt ngang ( thoát khỏi ) vòng lặp while III.3.Chỉ thị tiền xử lí #ASM #ENDASM: Cho phép đặt đoạn mã ASM thị , Chỉ đặt hàm CCS định nghĩa sẵn biến bit _RETURN_ để bạn gán giá trị trả cho hàm từ đoạn mã Assembly _C đủ mạnh để thay Assmemly Vì nên hạn chế lồng mã Assembly vào SVTH:Lê Minh Tâm-Lê Ngọc Thương 86 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi thường gây xáo trộn dẫn đến sau biên dịch mã chạy sai , bạn nắm rõ Assembly đọc hiểu mã Assembly sinh thông qua mục C/Asm list _Khi sử dụng biến không bank , CCS sinh thêm mã chuyển bank tự động cho biến Nếu sử dụng #ASM ASIS CCS không sinh thêm mã chuyển bank tự động ,phải tự thêm vào mã ASM #INCLUDE : Cú pháp : #include Hay #include “ filename” Filename : tên file cho thiết bị *.h , *.c Nếu định file đường dẫn khác thêm đường dẫn vào Luôn phải có để khai báo chương trình viết cho VĐK , đặt dòng #BIT , #BYTE , #LOCATE Và # DEFINE: #BIT id = X Y Với id : tên biến X : biến C ( 8,16,32,…bit) hay số địa ghi Y : vị trí bit x -> tạo biến bit đặt byte x vị trí bit y, tiện dùng kiểm tra hay gán trị cho bit ghi Điểm khác biệt so với dùng biến bit từ khai báo int1 : int1 tốn bit nhớ , đặt ghi đa mục đích CCS tự chọn , #BIT không tốn thêm nhớ id danh định đại diện cho bit định biến x , thay đổi giá trị id ( / ) thay đổi giá trị bit tương ứng Y thay đổi trị X #BYTE id = x X: địa id : tên biến C Gán tên biến id cho địa (thanh ghi ) x , sau muốn gán hay kiểm tra địa x cần dùng id Không tốn thêm nhớ , tên id thường dùng tên gợi nhớ chức ghi địa Lưu ý giá trị ghi thay đổi lúc hoạt động chương trình nên giá trị id tự thay đổi theo giá trị ghi Không nên dùng id cho ghi đa mục đích cách dùng biến int8 CCS dùng ghi lúc cho chương trình # LOCATE id = x Làm việc #byte có thêm chức bảo vệ không cho CCS sử dụng địa vào mục đích khác Sử dụng #LOCATE để gán biến cho dãy địa kề ( cặp ghi ) tiện lợi thay phải dùng biến với #byte # DEFINE id text SVTH:Lê Minh Tâm-Lê Ngọc Thương 87 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi Text : chuỗi hay số Dùng định nghĩa giá trị VD : #define a 12345 # DEVICE : # DEVICE chip option chip : tên VĐK sử dụng , không dùng tham số khai báo tên chip # include option : toán tử tiêu chuẩn theo chip: * = dùng pointer bit ( tất PIC ) * = dùng pointer bit ( PIC14 PIC18 ) * = 16 dùng pointer 16 bit ( PIC14 ,PIC 18) ADC = x sử dụng ADC x bit ( , 10 , bit tuỳ chip ) , dùng hàm read_adc( ) , trả giá trị x bit ICD = true : tạo mã tương thích debug phần cứng Microchip HIGH_INTS = TRUE : cho phép dùng ngắt ưu tiên cao _Khai báo pointer bit , bạn sử dụng tối đa 256 byte RAM cho tất biến chương trình _Khai báo pointer 16 bit , bạn sử dụng hết số RAM có VDK _Chỉ nên dùng khai báo #device cho pointer ADC VD : #device * = 16 ADC = 10 # ORG : # org start , end # org segment #org start , end { } Start , end: bắt đầu kết thúc vùng ROM dành riêng cho hàm theo sau , để riêng không dùng # USE : # USE delay ( clock = speed ) Speed : giá trị OSC mà bạn dùng VD: dùng thạch anh dao động 40Mhz : #use delay( clock = 40000000) _Chỉ có thị chương trình bạn dùng hàm delay_us ( ) delay_ms( ) #USE fast_io ( port) Port : tên port :từ A-G ( tuỳ chip ) _Dùng chương trình dùng lệnh io output_low() , set với lệnh , nhanh so với không dùng thị –b - - Trong hàm main( ) bạn phải dùng hàm set_tris_x( ) để rõ chân vào thị có hiệu lực , không chương trình chạy sai _Không cần dùng yêu cầu đặc biệt VD : # use fast_io( A ) #USE I2C ( options ) _Thiết lập giao tiếp I2C Option bao gồm thông số sau, cách dấu phẩy : Master : chip chế độ master SVTH:Lê Minh Tâm-Lê Ngọc Thương 88 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi Slave : chip chế độ slave SCL = pin : định chân SCL SDA = pin : định chân SDA ADDRESS =x : định địa chế độ slave FAST : định FAST I2C SLOW : định SLOW I2C RESTART_WDT : restart WDT chờ I2C_READ( ) FORCE_HW : sử dụng chúc phần cứng I2C ( chip hỗ trợ ) NOFLOAT_HIGH : không cho phép tín hiệu float high ( ??? ) , tín hiệu lái từ thấp lên cao SMBUS : bus dùng bus I2C , tương tự #use I2C (slave , sda= pin_C4 , scl= pin_C3 , address = 0xa00 , FORCE_HW ) #USE RS232 ( options ) _Thiết lập giao tiếp RS232 cho chip ( có hiệu lực sau nạp chương trình cho chip , giao tiếp RS232 sử dụng để nạp chip ) Option bao gồm : BAUD = x : thiết lập tốc độ baud rate : 19200 , 38400 , 9600 , PARITY = x : x= N ,E hay O , với N : không dùng bit chẵn lẻ XMIT = pin : set chân transmit ( chuyển data) RCV = pin : set chân receive ( nhận data ) _Các thông số hay dùng , tham số khác bổ sung sau VD : #use rs232(baud = 19200,parity = n, xmit = pin_C6, rcv = pin_C7) * Một số thị tiền xử lý khác : #CASE : cho phép phân biệt chữ hoa / thường tên biến , dành cho quen lập trình C #OPT n :với n=0 – : định cấp độ tối ưu mã , không cần dùng mặc định ( very tối ưu ) #PRIORITY ints : với ints danh sách ngắt theo thứ tự ưu tiên thực có nhiều ngắt xảy đồng thời , ngắt đứng đầu ngắt ưu tiên , dùng ngắt đưa ngắt vô Chỉ cần dùng dùng ngắt Xem cụ thể phần ngắt VD : #priority int_CCP1 , int_timer1 // ngắt CCP1 ưu tiên IV.Các hàm xử lí số, xử lí Bit, Delay IV.1 Các hàm xử ký số SVTH:Lê Minh Tâm-Lê Ngọc Thương 89 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi Bao gồm hàm: Sin() cos() tan() Asin() acos() atan() Abs() : lấy trị tuyệt đối Ceil( ) :làm tròn theo hướng tăng Floor ( ) :làm tròn theo hướng giảm Exp ( ) : tính e^x Log ( ) : Log10 ( ) : Pow ( ) : tính luỹ thừa Sqrt ( ) :căn thức _Các hàm chạy chậm VDK nhân phần cứng ( PIC 14 ,12 ) chủ yếu tính toán với số thực trả số thực ( 32 bit ) phần mềm IV.2 Các hàm xử lý bit phép toán Shift_right ( address , byte , value ) / Right Dịch phải (trái ) bit vào mảng hay cấu trúc Địa địa mảng hay địa trỏ tới cấu trúc ( kiểu &data) Bit byte thấp LSB Bit_clear ( var , bit ) Bit_set ( var , bit ) Bit_clear ( ) dùng xóa ( set = ) bit định vị trí bit biến var Bit_set ( ) dùng set=1 bit định vị trí bit biến var var : biến , 16 , 32 bit bit : vị trí clear ( set ) : từ 0-7 ( biến bit) , 0-15 ( biến 16 bit ) , 0-31 (biến 32 bit ) _Hàm không trả trị VD : Int x; X=11 ; //x=1011 Bit_clear ( x ,1 ) ; // x= 1001b = Bit_test ( var , bit ) : - Dùng kiểm tra vị trí bit biến var Hàm trả giá trị bit var var : biến 8, 16 ,32 bit bit : vị trí bit var Swap ( var ) : _var : biến byte - Hàm tráo vị trí bit với bit var , tương đương var =( var>>4 ) Hàm không trả trị Make8 ( var , offset ) : - Hàm trích byte từ biến var var : biến 8,16,32 bit offset vị trí byte cần trích ( 0,1,2,3) Hàm trả giá trị byte cần trích VD : Int16 x = 1453 ; // x=0x5AD Y = Make(x, 1) ; //Y= = 0x05 Make16 ( varhigh , varlow ) : SVTH:Lê Minh Tâm-Lê Ngọc Thương 90 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi - Trả giá trị 16 bit kết hợp từ biến bit varhigh varlow Byte cao varhigh , thấp varlow Make32 ( var1 , var2 , var3 , var4 ) : - Trả giá trị 32 bit kết hợp từ giá trị bit hay 16 bit từ var1 tới var4 Trong var2 đến var4 có không Giá trị var1 MSB , var2 , Nếu tổng số bit kết hợp 32 bit thêm vào MSB cho đủ 32 bit VD: Int a=0x01 , b=0x02 , c=0x03 , d=0x04 ; // giá trị hex Int32 e ; e = make32 ( a , b , c , d ); // e = 0x01020304 e = make32 ( a , b , c , ) ; // e = 0x01020305 e = make32 ( a, b, ); // e = 0x00010208 e = make32 ( a ,0x1237 ) ; // e = 0x00011237 IV.3 Các hàm Delay Để sử dụng hàm delay , cần có khai báo tiền xử lý đầu file , VD : sử dụng OSC 20 Mhz , cần khai báo : #use delay ( clock = 20000000 ) Hàm delay không sử dụng timer Chúng thực nhóm lệnh ASM để thực thi từ đầu tới cuối xong khoảng thời gian mà bạn quy định Tuỳ thời gian delay yêu cầu dài ngắn mà CCS sinh mã phù hợp có vài lệnh NOP cho thời gian nhỏ Hay vòng lặp NOP Hoặc gọi tới hàm phức tạp trường hợp delay dài Các lệnh nói chung vớ vẩn cho đủ thời gian quy định Nếu trong thời gian delay lại xảy ngắt thời gian thực thi ngắt không tính vào thời gian delay , xong ngắt quay chạy tiếp dòng mã xong hàm delay Do thời gian delay không Có hàm phục vụ : / delay_cycles (count ) Count : số từ – 255 , số chu kỳ lệnh chu kỳ lệnh chu kỳ máy - Hàm không trả trị Hàm dùng delay số chu kỳ lệnh cho trước VD : delay_cycles ( 25 ) ; // với OSC = 20 Mhz , hàm delay us / delay_us ( time ) Time : biến số = – 255 , time số = -65535 _Hàm không trả trị - Hàm cho phép delay khoảng thời gian dài theo đơn vị us SVTH:Lê Minh Tâm-Lê Ngọc Thương 91 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi - Quan sát C / asm list bạn thấy với time dài ngắn khác , CSS sinh mã khác / delay_ms (time ) Time = 0-255 biến số hay = 0-65535 số - Hàm không trả trị - Hàm cho phép delay dài V Xử lí ADC, Các hàm I/O V.1 Xử lý ADC PIC có nhiều chân phục vụ xử lý ADC với nhiều cách thức khác Để dùng ADC , bạn phải có khai báo #DEVICE cho biết dùng ADC bit ( tuỳ chip hỗ trợ , thường hay 10 bit hơn) Bạn cần lưu ý là: VDK hỗ trợ ADC 10 bit giá trị vào 10 bit , chia cho bit Do biến trở chiết áp cấp cho ngõ vào ADC mà bạn chọn chế độ 10 bit nhạy so với chế độ bit ( bit cuối có thay đổi không ảnh hưởng giá trị bit cao kết bit ADC thay đổi ) , chương trình có chế độ kiểm tra ADC để cập nhật tính toán , hay dùng ngắt ADC , chạy hoài Dùng ADC bit hạn chế điều Do mà CCS cung cấp chọn lựa ADC hay 10 bit tùy mục đích sử dụng V.2 Các hàm vào IC / Output_low ( pin ) , Output_high (pin ) : _Dùng thiết lập mức ( low, 0V ) hay mứ c ( high , 5V ) cho chân IC , pin vị trí chân _Hàm đặt pin làm ngõ , xem mã asm để biết cụ thể _Hàm dài 2-4 chu kỳ máy Cũng xuất xung dùng set_tris_X() #use fast_io VD : chương trình sau xuất xung vuông chu kỳ 500ms , duty =50% chân B0 ,nối B0 với led làm nhấp nháy led #include #use delay( clock=20000000) Main() { while(1) { output_high(pin_B0) ; Delay_ms(250) ; // delay 250ms Output_low (pin_B0); Delay_ms (250 ); } } SVTH:Lê Minh Tâm-Lê Ngọc Thương 92 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi / Output_bit ( pin , value ) : Pin : tên chân ; Value : giá trị hay - Hàm xuất giá trị / pin , tương tự hàm Thường dùng giá trị tuỳ thuộc giá trị biến bit , hay muốn xuất đảo giá trị ngõ trước / Output_float ( pin ) : - Hàm set Pin ngõ vào / Input ( pin ) : - Hàm trả giá trị trạng thái chân IC Giá trị bit / Output_X ( value ) : - X tên port có chip Value giá trị byte - Hàm xuất giá trị byte port Tất chân port đếu ngõ / Input_X ( ) : _X : tên port ( a, b ,c ,d e ) - Hàm trả giá trị bit giá trị hữu port / Port_B_pullups ( value ) : _Hàm thiết lập ngõ vào port B pullup Value =1 kích hoạt tính value =0 ngừng - Chỉ chip có port B có tính dùng hàm / Set_tris_X ( value ) : Hàm định nghĩa chân IO cho port ngõ vào hay ngõ Chỉ dùng với #use fast_IO Sử dụng #byte để tạo biến đến port thao tác biến thao tác port Value giá trị bit Mỗi bit đại diện chân bit=0 set chân ngõ vào , bit= set chân ngõ VI Truyền thông với PC qua cổng Com, Xử lí chuỗi: Điều cần thiết bạn muốn VĐK hoạt động truyền liệu cho PC xử lý , nhận giá trị từ PC để xử lý điều khiển ( dùng PC điều khiển động , nhiệt độ , hay biến PC thành dụng cụ đo đại lượng điện , Oscilocope , ) - Để sử dụng giao thức , phải có khai báo ví dụ sau : #use delay (clock = 40000000 ) // VDK dùng OSC 40Mhz #use rs232 (baud=19200 , parity=n , xmit=pin_C6 , rcv=pin_C7 ) // baud= 19200 , không chẵn lẻ , chân truyền C6 , chân nhận C7 SVTH:Lê Minh Tâm-Lê Ngọc Thương 93 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi -Các hàm liên quan :Printf ( ) Getc ( ) putc ( ) Getch ( ) putchar ( ) Getchar ( ) fputc ( ) Fgetc ( ) puts ( ) Gets ( ) fputs ( )Fgets ( ) Kbhit ( ) Assert ( ) Perror ( ) Set_uart_speed () - Tất hàm đòi hỏi phải khai báo thị tiền xử lý #use RS232 ( ) / printf ( string ) Printf ( cstring , values ) Dùng xuất chuỗi theo chuẩn RS232 PC String chuỗi hay mảng ký tự ( kết thúc ký tự null ) Value danh sách biến , cách dấu phẩy Khai báo dạng format value theo kiểu %wt Trong w có không , có giá trị từ 1-9 rõ có ký tự xuất ( mặc định có nhiêu ), 01-09 chèn thêm cho đủ ký tự 1.1-1.9 cho trường hợp số thực t kiểu giá trị, t : C : ký tự S : chuỗi ký tự U : số bit không dấu x : số bit kiểu hex ( ký tự viết thường ,VD : 1ef ) D : số bit có dấu e : số thực có luỹ thừa VD : e12 f : số thực Lx : số hex 16 /32 bit ( ký tự viết thường ) Lu : số thập phân không dấu Ld : số thập phân có dấu / KBHIT ( ) : Thường dùng RC6 RC7 cho RX TX giao tiếp cổng COM , VDK PIC trang bị phần cứng phục vụ việc với ghi gởi nhận bit bào hiệu tương ứng Do dùng RS232 hỗ trợ từ phần cứng KHBIT ( ) trả TRUE ký tự nhận ( đệm phần cứng ) sẵn sàng cho việc đọc , trả chưa sẵn sàng Hàm dùng hỏi vòng xem có data nhận từ RS232 để đọc VII.Làm việc với ngắt VII.1 Cơ chế họat động ngắt / Ngắt cấp : Trên PIC 14 , 12 ,10 ,tất ngắt có cấp ưu tiên Nghĩa ngắt phục vụ bị ngắt ngắt khác xảy Cơ chế sinh mã cho ngắt CCS sau : nhảy đến địa ngắt , thường 004h , lưu SVTH:Lê Minh Tâm-Lê Ngọc Thương 94 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi ghi W, STATUS , PCLATCH , FSR, sau hỏi vòng xem cờ ngắt xảy nhảy đến hàm phục vụ ngắt thực xong phục hồi tất ghi , “RETFIE” – thoát ngắt Số chu thi từ chỗ ngắt đến nhảy vào hàm ngắt cỡ 20 chu kỳ lệnh / Ngắt cấp : Để sử dụng ngắt cấp , khai báo #device phải có high_ints=true Và hàm ngắt muốn ưu tiên cao thêm FAST hay HIGH theo sau thị tiền xử lý hàm VII.2 Khai báo ngắt Mỗi dòng VDK có số lượng nguồn ngắt ngắt khác : PIC 14 có 14 ngắt , PIC 18 có 35 : #INT_AD : chuyển đổi A /D hoàn tất , thường không nên dùng #INT_ADOF : I don’t know #INT_BUSCOL : xung đột bus #INT_BUTTON : nút nhấn ( hoạt động ) #INT_CCP1 : có Capture hay compare CCP1 #INT_CCP2 : có Capture hay compare CCP2 #INT_COMP : kiểm tra Comparator #INT_EEPROM : hoàn thành ghi EEPROM #INT_EXT : ngắt #INT_EXT1 : ngắt #INT_EXT2 : ngắt #INT_I2C : có hoạt động I 2C #INT_LCD : có hoạt động LCD #INT_LOWVOLT : phát áp thấp #INT_PSP : có data vào cổng Parallel slave #INT_RB : thay đổi chân B4 đến B7 #INT_RC : thay đổi chân C4 đến C7 #INT_RDA : data nhận từ RS 232 sẵn sàng #INT_RTCC : tràn Timer #INT_SSP : có hoạt động SPI hay I 2C #INT_TBE : đệm chuyển RS 232 trống #INT_TIMER0 : tên khác #INT_RTCC SVTH:Lê Minh Tâm-Lê Ngọc Thương 95 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi #INT_TIMER1 : tràn Timer #INT_TIMER2 : tràn Timer #INT_TIMER3 : tràn Timer #INT_TIMER5 : tràn Timer #INT_OSCF : lỗi OSC #INT_PWMTB : ngắt cuả PWM time base #INT_IC3DR : ngắt đổi hướng ( direct ) IC #INT_IC2QEI : ngắt QEI #INT_IC1 : ngắt IC VII.3 Các hàm thiết lập hoạt động ngắt / enable_interrupts ( level ) _level tên ngắt cho GLOBAL phép ngắt cấp toàn cục _Mọi ngắt VDK có bit cờ ngắt , bit cho phép ngắt Khi có ngắt bit cờ ngắt bị set =1, ngắt có họat động hay không tuỳ thuộc bit cho phép ngắt enable_interrupts (int_xxx ) bật bit cho phép ngắt Nhưng tất ngắt thực thi bit cho phép ngắt toàn cục = , enable_interrupts( global ) bật bit VD : phép ngắt timer0 timer1 hoạt động: enable_interrupts (int_timer0); enable_interrupts (int_timer1 ) ; enable_interrupts ( global ); // cần dùng lần muốn có thay đổi đặc biệt / disable_interrupts ( level ) _Level giống _Hàm vô hiệu ngắt cách set bit cho phép ngắt = _Disable_interrupts ( global ) set bit cho phép ngắt toàn cục =0 , cấm tất ngắt _Không dùng hàm hàm phục vụ ngắt tác dụng , cờ ngắt bị xoá tự động / clear_interupt ( level ) _level GLOBAL _Hàm xoá cờ ngắt ngắt định level / ext_int_edge ( source , edge ) _Hàm thiết lập nguồn ngắt EXTx cạnh lên hay cạnh xuống SVTH:Lê Minh Tâm-Lê Ngọc Thương 96 Đồ Án Tốt Nghiệp GVHD:Bùi Thị Kim Chi _source : nguồn ngắt Trên PIC 18 có nguồn ngắt chân EXT0 , EXT1 , EXT2 ứng với source = ,1 , Các PIC khác có nguồn EXT nên source = _edge : chọn cạnh kích ngắt , edge = L_TO_H chọn cạnh lên ( từ mức thấp chuyển lên mức cao ) hay H_TO_L chọn cạnh xuống SVTH:Lê Minh Tâm-Lê Ngọc Thương 97 ... delay_cycles ( 25 ) ; // với OSC = 20 Mhz , hàm delay us / delay_us ( time ) Time : biến số = – 255 , time số = - 655 35 _Hàm không trả trị - Hàm cho phép delay khoảng thời gian dài theo đơn vị us SVTH:Lê... list bạn thấy với time dài ngắn khác , CSS sinh mã khác / delay_ms (time ) Time = 0- 255 biến số hay = 0- 655 35 số - Hàm không trả trị - Hàm cho phép delay dài V Xử lí ADC, Các hàm I/O V.1 Xử... chu kỳ 50 0ms , duty =50 % chân B0 ,nối B0 với led làm nhấp nháy led #include #use delay( clock=20000000) Main() { while(1) { output_high(pin_B0) ; Delay_ms( 250 ) ; // delay 250 ms Output_low