Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.27.202] |
|
Сообщ.
#1
,
|
|
|
Помогите пожалуйста с программой для PIC16F84A. Задача такая: Нужно написать программу которая обеспечивала бы мигание светодиода подключенного к порту В с частотой 2Гц. При поступлении низкого сигнала на порт В5 загорался второй светодиод подключенный к порту А. Попеременное мигание осуществить с помощью прерываний инициируемых таймером. Программу написал но сердцем чувствую что что-то не так.
Цитата List p=16F84a Include <c:\P16F84a.inc> _w equ 0x00b; _status equ 0x00d; PAGE; __CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON &_WDT_OFF org 0; goto Mainline org 4 int movwf_w; movf STATUS,w; movwf STATUS; bcf INTCON, T0IF movlw B'00000001' xorwf PORTB movwf STATUS; swapf_w; swapf_ww; retfie; Mainline bsf STATUS, RP0; movlw B'11111110' movlw TRISA; movlw B'11010111' movlw OPTION_REG; movlw B'11111110' movlw TRISB; bcf STATUS, RP0; movlw B'10100000' movwf INTCON; Loop btfsc PORTB, 5; goto Setbit; bcf PORTA,0; goto Loop; Setbit; Bsf PORTA, 0; goto Loop; end |
Сообщ.
#2
,
|
|
|
Цитата Spag @ Программу написал но сердцем чувствую что что-то не так. Да, сердце не обманешь!!! Смотри: Цитата Spag @ Честно говоря, я в тихом "Kernel panic"....А если учесть, сколько раз ты повторил сию ошибку... в 40 строках программы.... movlw B'11111110' movlw TRISA; |
Сообщ.
#3
,
|
|
|
medved_68 Ну а в чем проблема тогда, расскажи
|
Сообщ.
#4
,
|
|
|
Цитата Spag @ medved_68 Ну а в чем проблема тогда, расскажи Так я привел в цитате. И если приведенное ни о чем не говорит - то дальнейший диалог бесполезен. На данный момент.... |
Сообщ.
#5
,
|
|
|
PIC16F84 и PIC16C84 отличаются возможностью перезаписи?
|
Сообщ.
#6
,
|
|
|
Цитата Gysmi @ PIC16F84 и PIC16C84 отличаются возможностью перезаписи? Конечно. Более подробно здесь |
Сообщ.
#7
,
|
|
|
Вот если-бы не мой больничный - хрен-бы я чего написал!
В архиве Proteus модель. Пользуися З.Ы. с тебя стакан! LIST p=16F84A #include <P16F84A.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC cblock 0x20 STATUS_copy ;Копии содержимого регистров WREG_copy FSR_copy Timer ;Счётчик таймера OldLED0 endc ;[Блок макросов]=========================================================== bank0 macro ;Включение банка 0 bcf STATUS,RP0 endm bank1 macro ;Включение банка 1 bsf STATUS,RP0 endm #DEFINE LED0 PORTB #DEFINE LED1 PORTA,0 #DEFINE SW0 PORTB,5 org 0x0000 goto Start org 0x0004 movwf WREG_copy ;Сохраняем WREG movf STATUS, w movwf STATUS_copy ;Сохраняем STATUS bank0 bcf INTCON,T0IF ;Сброс флага прерывания TMR0 decf Timer, f ;Timer = Timer - 1 btfss STATUS, Z goto Iret incf OldLED0, f ;Инвертируем бит 0 PORTB, мигаем светодиодом movf OldLED0, w movwf LED0 movlw .125 movwf Timer Iret: movlw .250 movwf TMR0 movf STATUS_copy, w movwf STATUS ;Восстанавливаем STATUS swapf WREG_copy, f ;Восстанавливаем WREG, MOVF использовать swapf WREG_copy, w ;нельзя т.к. эта команда портит STATUS retfie Start: clrf PORTA clrf PORTB bank1 movlw b'00000000' movwf TRISA movlw b'00100000' movwf TRISB movlw b'00000011' ;пределитель 1:16 4000000/4/16=62500 movwf OPTION_REG bank0 movlw .125 ;62500/125=500 movwf Timer movlw .250 movwf TMR0 ;500/250=2Hz bsf INTCON,T0IE bsf INTCON,GIE MainLoop: btfsc SW0 goto NoPress bsf LED1 goto MainLoop NoPress: bcf LED1 goto MainLoop end Прикреплённый файлFlashLEDs.rar (12,31 Кбайт, скачиваний: 223) |