chek код Асемблер

G

gimmy

Guest
За съжаление човек, но ми липсваше себе си, аз не знам защо ми код не работи, може някой да ми помогне д chek го, моля?
Заглавието "PIC16F73"
Списъкът P = 16f73, F = inhx32
# включват <p16f73.inc>MSGPTR EQU 0x26; общо предназначение регистър
BITS EQU 0x27; общо предназначение регистър
CNTMSEC EQU 0x28; общо предназначение регистър
ZEROBIT EQU 0x02; Zero малко Статус
рег.DELAY1_VAL1 EQU 0x21
DELAY1_VAL1_TEMP EQU 0x22
DELAY2_VAL1 EQU 0x23
DELAY2_VAL1_TEMP EQU 0x24
TMR0_TEMP EQU 0x25; Използваните за съхраняване TMR0 през прекъсне
W_TEMP EQU 0x29; Използваните за съхраняване W по време на прекъсване
SPBRG_VAL EQU 0x30; набор baud честота 9600 за 4Mhz часовник
PAUSE_DELAY EQU 0x31
CBLOCK 0x020
Flags; байт да съхранявате индикатор знамена
ENDC

ORG 0x00; нулиране вектор
Гото Старт
ORG 0x08; произход на външните RA0/INTDELAY1 MOVLW 0xB2;
бр

на външната петелки е 0xFF-Val
MOVWF DELAY1_VAL1;
LOOP2 MOVLW 0x01;
бр

на вътрешната петелки е 0xFF-Val
MOVWF TMR0
BANKSEL OPTION_REG;
MOVLW B'11000111 "; набор prescaler 256
MOVWF OPTION_REG;
BANKSEL PORTA
LOOP1
MOVF TMR0, 0; засяга Я малко СТАТУС
BTFSS статус, ZEROBIT; Виж, ако Z късче е зададен
Гото LOOP1; Не, проверете отново
INCF DELAY1_VAL1, 1; Да,
Inc DELAY1_VAL1 Засяга Z битов
BTFSS статус, ZEROBIT; използвани за да се види дали DELAY1_VAL1 е нула
Гото LOOP2; НЕ - започнете вътрешната електрическа верига отново
RETLW 0; ДА - възвръщаемост от DELAY1

DELAY2 MOVLW 0xFE;
бр

на външната петелки е 0xFF-Val
MOVWF DELAY2_VAL1;
LOOP4 MOVLW 0x01;
бр

на вътрешната петелки е 0xFF-Val
MOVWF TMR0
MOVLW B'11000111 "; набор prescaler 256
BANKSEL OPTION_REG;
MOVWF OPTION_REG;
BANKSEL PORTA
LOOP3
MOVF TMR0, 0; засяга Я малко СТАТУС
BTFSS статус, ZEROBIT; Виж, ако Z късче е зададен
Гото LOOP3; Не, проверете отново
INCF DELAY2_VAL1, 1; Да,
Inc DELAY1_VAL1 Засяга Z битов
BTFSS статус, ZEROBIT; използвани за да се види дали DELAY1_VAL1 е нула
Гото LOOP4; НЕ - започнете вътрешната електрическа верига отново
RETLW 0; ДА - възвръщаемост от DELAY1Започвам
; Прекъсване Initialisation
MOVLW B'00000000 "; Комплекти GIE и PORTB вътр.
MOVWF INTCON; прекъсне позволява да се прилагат по PORTB <7:4>

; Пристанищата Initialisation
BANKSEL PORTA; изберете банка на PORTA
CLRF PORTA;
CLRF PORTB; Port конфигурация
BANKSEL TRISA
MOVLW 0xFF; конфигурирате Port A
MOVWF TRISA; като суровина
MOVLW B'00000000 "; Конфигурирайте Порт Б
MOVWF TRISB; Изходни = 0,1,2,3,4,5,6,7
MOVLW B'00000000 "
MOVWF TRISC; Конфигурирайте PORTC като продукция
BANKSEL PORTA; Изберете банка на PORTA
MOVLW B'00000000 "; Всички PORTC
на продукция = 0
MOVWF PORTC;

; TX UART initialilsation
BANKSEL TRISA; изберете банков 1
MOVLW 0xc0; определя три бита за TX и RX
MOVLW SPBRG_VAL; baud определен процент
MOVWF SPBRG
MOVLW 0x24; позволяват пренос и висок процент baud
MOVWF TXSTA
BANKSEL PORTA; изберете банков 0
MOVLW 0x90; позволи сериен порт и прием
MOVWF RCSTA

; Задаване на адрес
OUTMSG MOVWF MSGPTR; пуснати "W" в съобщението показалка
MSGLOOP MOVF MSGPTR, W; сложи офсет в "W"
CALL MSGTXT; връща ASCII герой в "W"
MOVWF PORTC;
ADDLW 0; определя нулева флага, ако W = 0
BTFSC СТАТУС, 2; пропуснете нулата, ако не е малко
ВЪЗВРЪЩАЕМОСТ; готови, ако W = 0
CALL OUTCH; изхода на символите
INCF MSGPTR, F; точка в следващите
Гото MSGLOOP; повече символи
MSGTXT
ADDWF PCL, F; офсетов добавя PCL
RETLW d'1 "; 1
RETLW d'84 "; 84
RETLW 0x63 "С"
RETLW 0x6F "о"
RETLW 0x6E "N"
RETLW 0x20 "пространство"
RETLW 0x30;'0 "
RETLW 0x30;'0 "
RETLW 0x3A ":"
RETLW 0x30;'0 "
RETLW 0x43 "С"
RETLW 0x3A ":"
RETLW 0x38; "8"
RETLW 0x34; "4"
RETLW 0x3A ":"
RETLW 0x30;'0 "
RETLW 0x30;'0 "RETLW 0x3A ; ':' RETLW 0x30;'0 "
RETLW 0x45 "E"
RETLW 0x3A ":"
RETLW 0x44 "D"
RETLW 0x34; "4"
RETLW 0x00; края на seding рутинни (действа като спрете битове)

OUTCH MOVWF TXREG; пуснати W предават в регистъра
MOVLW 8; осем часа бита на данни
MOVWF BITS; брой битове
; BSF PORTA, 1; проекта малко по RA1 CHEK ////////////////////////
TXLOOP MOVLW 0x31; 49 десетични, забавяне време
CALL MICRO4; изчакайте 49 х 4 = 196 microseconds
RRF TXREG, F; завъртите право най-малко в изпълнение
BTFSC статус, 0; носят 0, ако искате да зададете малко, (с ниско)
Гото CLRBIT; друго ясно битов, (висока)
; BSF PORTA, 1;
5 V на ПИН-1 (RA1) CHEK //////////////////
Гото TESTDONE; края на герой?
CLRBIT; BCF PORTA, 1; 0V на ПИН-1 (RA1) CHEK /////////////////
Ноември, да направят и двете опции 12 micosec (ylp "ноември")
TESTDONE DECFSZ BITS, F; 1 по-малко данни битов, когато пропуснете нулата
Гото TXLOOP; повече битове наляво, незабавно за това
MOVLW 0x34; пълния 208 microsec този път
CALL MICRO4; забавяне за последните данни битов
; BCF PORTA, 1; 0V, (висока) за спиране битове CHEK /////////////////
MOVLW 0x68; десетичната 104 закъснение за 2 спре бита
CALL MICRO4
ВРЪЩАНЕ
NMSEC MOVWF CNTMSEC; W до msec броене регистър
MSECLOOP MOVLW 0xF8; 8 microsec режийни
CALL MICRO4; 248 * 4 2 = 994 тук
Ноември; пълно закъснение (ylp "ноември")
Ноември;
DECFSZ CNTMSEC, F; снижаване брои, когато пропуснете нулата
Гото MSECLOOP; контур
ВРЪЩАНЕ
MSEC1 MOVLW 0xF9; 4 microsec режийни
Ноември (2 за CALL) (ylp "ноември")
MICRO4 ADDLW 0xFF; изваждате от 1 W
BTFSS СТАТУС, 2; когато пропуснете нулата
Гото MICRO4; контур
ВРЪЩАНЕ

BANKSEL PORTA
BSF PORTB, 4
CLRF TXREG

; A / D initialsation (A / D не се използва)
BANKSEL ADCON1; Конфигурирайте A / D Пристанища, наляво оправдани
MOVLW B'00000100 "; RA0 = Аналогов вход
MOVWF ADCON1; Останалата както Digital I / O
BANKSEL ADCON0
MOVLW B'10000000 "; Fosc/32
MOVWF ADCON0

; Включете A / D
BANKSEL ADCON0
BSF ADCON0, 0; Sitch на A / D
CALL DELAY2

ATOD
BSF PORTB, 0
BSF ADCON0, 2; Старт A / D конверсия
ATODLOOP
BTFSC ADCON0, 2; Проверете дали преобразуването се свърши
Гото ATODLOOP; NO
BANKSEL АДРЕС
MOVF АДРЕС, 0

; Предават данните в WREG когато предават регистъра е празна.
TransmitSerial:
BANKSEL PORTA; изберете банков 0
BTFSS PIR1, TXIF; проверите дали излъчвателя зает
Гото -1$; изчакайте докато излъчвателя не е зает
MOVWF TXREG
ВРЪЩАНЕ
BTFSC W, 7
BTFSC W, 6
CALL DELAY1
CLRF TXREG
Гото ATOD
приключвам

тази програма е да направим предаване uart чрез комуникация между pic16f73 и eb500.Тя смята, аналогов сигнал от Porta, 0,
след това прави преобразуване в цифров и го изпраща в TX uart.

видове отношение

 

Welcome to EDABoard.com

Sponsor

Back
Top