PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Hỏi ý nghĩa lệnh asm (http://www.picvietnam.com/forum/showthread.php?t=4163)

DIEP 24-05-2009 05:52 PM

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

tungnh 24-05-2009 08:48 PM

Trích:

Nguyên văn bởi DIEP (Post 26039)
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 ---->>>>>>>>>>>> if result # 0 goto drive4
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive3 ;Yes. Right --->>>>>>>>>>>>> if result = 0 goto drive3
movlw b'00000101' ;No. Set Left data
goto drive_end ;Jump to PORTA write

Lệnh bz là lệnh nhảy.Nếu kết quả = 0 thì nhảy đến nhãn, với lệnh bnz thì kết quả khác 0 thì nhảy đến nhãn.

namqn 24-05-2009 11:04 PM

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

Còn BNZ nhan sau khi hợp dịch sẽ được khai triển thành
Code:

        BTFSS        3, 2
        GOTO        nhan

Thân,

Babade 20-12-2010 06:25 PM

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;
}
}


Múi giờ GMT. Hiện tại là 09:15 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam