![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Oct 2007
Bài gửi: 15
: |
Hỏi ý nghĩa lệnh asm
Xin các bạn giải thích ý nghĩa lệnh bz và bnz trong đoạn code sau:
drive2 movf porta,w ;Read PORTA sublw b'000000110' ;Check motor position bnz drive4 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive3 ;Yes. Right movlw b'00000101' ;No. Set Left data goto drive_end ;Jump to PORTA write |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
Trích:
|
|
![]() |
![]() |
![]() |
#3 |
Trưởng lão PIC bang
|
BZ và BNZ là hai lệnh giả (Pseudo-instruction) được xây dựng dưới dạng các macro trong trình hợp dịch (assembler) MPASM.
BZ nhan sau khi hợp dịch sẽ được khai triển thành Code:
BTFSC 3, 2 GOTO nhan Code:
BTFSS 3, 2 GOTO nhan
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 4
: |
các anh ơi kíu em với.Em đang làm đồ án vxl lập trình robot dùng 16f877a mà chưa biết j nhìu.Em cóp nhạt vài đoạn code viet lại thi robot toan di lùi.Các cao thủ kíu em bàn thua này với.
doan code cua em the này,các bác đọc đừng cười nhé ---------------------------------------------------------------- #include "16f877a.h" #include "DEF_877A.H" #INT_EXT #use delay(clock=12000000hz) #fuses HS,NOWDT,NOPROTECT,NOLVP /*DINH NGHIA CHAN*/ #define tien1 rc1 #define LUI1 rc0 #define tien2 rc2 #define LUI2 rc3 #define CHAY1 rc4 #define CHAY2 rc5 #define GAT3 rc6 #define hanh_trinh ra4 #define SENSOR PORTB /*#define SENSOR1 rb1 #define SENSOR2 rb2 #define SENSOR3 rb3 #define SENSOR4 rb4 #define SENSOR5 rb5 #define SENSOR6 rb6*/ /*KHAI BAO CON*/ void trai_tien(); void trai_lui(); void trai_dung(); void fai_tien(); void fai_lui(); void fai_dung(); void TIEN(); void LUI(); void RE_TRAI(); void RE_FAI(); void STOP(); void GAT_VAT(); void DO_VAT(); void KIEM_TRA_VACH(); void GIUA_VACH(); void kt_SENSOR(); void TOI_DICH(); /*CHUONG TRINH CON CO BAN*/ void trai_tien() { CHAY1=1; TIEN1=1; LUI1=0; } void trai_lui() { CHAY1=1; TIEN1=0; LUI1=1; } void trai_dung() { CHAY1=0; } void fai_tien() { CHAY2=1; TIEN2=1; LUI2=0; } void fai_lui() { CHAY2=1; TIEN2=0; LUI2=1; } void fai_dung() { CHAY2=0; } void TIEN() { trai_tien(); fai_tien(); } void LUI() { trai_lui(); fai_lui(); } void RE_FAI(int i) { fai_dung(); trai_tien(); } void RE_TRAI(int i) { trai_dung(); fai_tien(); } void STOP() { trai_dung(); fai_dung(); } /*HAM HO TRO*/ void trai_tien(int i) { CHAY1=1; SETUP_TIMER_2(T2_DIV_BY_4,124,1); SETUP_CCP2(CCP_PWM); SET_PWM2_DUTY(i); } void fai_tien(int i) { CHAY2=1; SETUP_TIMER_2(T2_DIV_BY_4,124,1); SETUP_CCP1(CCP_PWM); SET_PWM1_DUTY(i); } /*XU LY TOC DO*/ void TOC_DO (signed int TOC_DO_TRAI, signed int TOC_DO_FAI) { int TRAI_PWM_i=0,FAI_PWM_i=0; /* TRAI */ if( TOC_DO_TRAI >= 0 ) { TRAI_PWM_i = 1.25*TOC_DO_TRAI; TRAI_TIEN(TRAI_PWM_i); } else { TOC_DO_TRAI = -TOC_DO_TRAI; TRAI_PWM_i = 1.25*TOC_DO_TRAI; /* FAI */ if( TOC_DO_FAI >= 0 ) { FAI_PWM_i = 1.25*TOC_DO_FAI; FAI_TIEN(FAI_PWM_i); } else { TOC_DO_FAI = -TOC_DO_FAI; FAI_PWM_i = 1.25*TOC_DO_FAI; } } } /* DIEU KHIEN CHINH*/ void GAT_VAT() { STOP(); GAT3=1; { char x=0; TRISA = 0b00010000; TRISC=0x0; PORTC=0; SETUP_TIMER_0(RTCC_EXT_H_TO_L); SET_RTCC(0); while (true) { x=GET_RTCC(); if (x==2) GAT3=0; } } } void main() { TRISB=0x01; TRISC=0x00; enable_interrupts(GLOBAL); enable_interrupts(INT_EXT); } switch (SENSOR) { case 0b11111110 : GAT_VAT(); break; case 0b11111100 : GAT_VAT(); break; case 0b11000000 : GAT_VAT(); break; case 0b11100000 : GAT_VAT(); break; case 0b10100000 : GAT_VAT(); break; case 0b10110000 : GAT_VAT(); break; case 0b10010000 : GAT_VAT(); break; case 0b10011000 : GAT_VAT(); break; case 0b10001000 : GAT_VAT(); break; case 0b10001100 : GAT_VAT(); break; case 0b10000100 : GAT_VAT(); break; case 0b00000000: LUI() ; break; case 0b00010000: TIEN() ; break; case 0b00110000: RE_TRAI(80) ; break; case 0b00100000: RE_TRAI(60) ; break; case 0b01100000: RE_TRAI(40) ; break; case 0b01000000: RE_TRAI(30) ; break; case 0b00011000: RE_FAI(80) ; break; case 0b00001000: RE_FAI(60) ; break; case 0b00001100: RE_FAI(40) ; break; case 0b00000100: RE_FAI(20) ; break; case 0b01111100: TIEN() ; break; case 0b01111110: STOP() ; break; } } |
![]() |
![]() |
![]() |
|
|