Просмотр этой темы:
3 анонимных пользователей
Младший сотрудник
Зарегистрирован:
31.07.2011 14:51 Из: Тирасполь
Сообщений:
30
|
Цитата:
WDT тактируется от отдельного встроенного RC-генератора (т.е. работающего даже если нет тактирования основного модуля). Для увеличения длительности отсчета между счетчиком и генератором можно включить делитель. Единственное программное средство воздействия на WDT это команда CLRWDT очищающая регистр счетчика. Бит конфигурации включающий/выключающий WDT доступен только на этапе программирования. Состояние регистра OPTION_REG после сброса соответсвует назначению делителя на WDT и на максимальное деление. Возможно не в такой последовательности, но об этом написано в описании на микроконтроллер. В результате имея включенный в конфигурации WDT, назначенный на WDT и на максимум делитель и НЕ используя CLRWDT получем полный сброс микроконтроллера через примерно ~2.3 сек после предыдущего сброса. Я пытался добиться, что бы прочитали и пришли к такому выводу самостоятельно.
Отправлено: 24.07.2013 13:49
|
|
Технолог
Зарегистрирован:
12.01.2009 7:28 Из: Уфа
Сообщений:
128
|
все работает
LIST P=PIC16F84A
вот код.
Отправлено: 25.07.2013 14:18
Отредактировано пользователем MACTEP 26.07.2013 8:22:00
|
|
Администратор
Зарегистрирован:
07.08.2008 20:40 Из: Тирасполь
Сообщений:
7276
|
В отсчете времени (Pause) применяй CLRWDT!)))
Отправлено: 26.07.2013 8:19
|
|
Технолог
Зарегистрирован:
12.01.2009 7:28 Из: Уфа
Сообщений:
128
|
спасибо
Отправлено: 30.07.2013 12:59
|
|
я алкоголик из Москвы
|
||
Технолог
Зарегистрирован:
12.01.2009 7:28 Из: Уфа
Сообщений:
128
|
начал читать и изучать дальше и дошел до "передача данных в сторону компьютера" в продолжение этой темы.
схема та же самая просто подключение производится к порту А. вот схема сопряжения. А вот описание и принцип работы Сейчас мы составим несколько элементарных программ для МК: – передача от МК в сторону ПК набора символов; – прием на стороне МК от ПК символов; – двухсторонний обмен: ПК<=>МК. Программа непрерывной передачи в сторону ПК фразы "Ура! ". Периодичность посылки 1 сек. LIST P=PIC16F84A __CONFIG H3FF1 W EQU 0 F EQU 1 STATUS EQU H0003 PORTA EQU H0005 PORTB EQU H0006 TRISA EQU H0005 TRISB EQU H0006 C EQU 0 Reg_1 EQU H000C ; для счетчика паузы 100 мкс Reg_2 EQU H000D ; для счетчика битов в байте Reg_3 EQU H000E ; для передаваемого символа Reg_4 EQU H000F Reg_5 EQU H0010 Reg_6 EQU H0011 org 0 ; начало программы ; подготовительные моменты Start bsf STATUS,5 ; переход в Банк 1 movlw b00011101 ; RA0 на выход, остальные на вход movwf TRISA clrf TRISB bcf STATUS,5 ; переход назад в Банк 0 bsf PORTA,0 ; установка 1 - "режим ожидания" clrf PORTB ; очистка порта ; вставка символа "У" для передачи m3 movlw "У" ; копируем букву У (рус) как символ, который movwf Reg_3 ; пропишется в кодировке ANSI в Reg_4 (hС4) call Tx ; о кодировке ANSI мы поговорим чуть позже movlw "р" movwf Reg_3 call Tx movlw "а" movwf Reg_3 call Tx movlw "!" movwf Reg_3 call Tx movlw " " movwf Reg_3 call Tx ; т.о. отправлено "Ура! ", call Pause2 goto m3 ; 5 символов, в т.ч. пробел ; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс) Tx movlw .9 ; 8+1, т.е + бит C из STATUS movwf Reg_2 bcf STATUS,C ; подготовка стартового бита m1 btfsc STATUS,C goto bit1 goto bit0 bit1 bsf PORTA,1 ; передача единицы call Pause goto m2 bit0 bcf PORTA,1 ; передача нуля call Pause goto m2 m2 rrf Reg_3,F ; сдвиг вправо для передачи с младшего бита decfsz Reg_2,F goto m1 bsf PORTA,1 ; установка 1 - "режим ожидания" call Pause return ;delay = 95 machine cycles Pause movlw .31 movwf Reg_1 wr decfsz Reg_1, F goto wr nop return ;delay = 1000000 machine cycles Pause2 movlw .173 movwf Reg_4 movlw .19 movwf Reg_5 movlw .6 movwf Reg_6 wr2 decfsz Reg_4, F goto wr2 decfsz Reg_5, F goto wr2 decfsz Reg_6, F goto wr2 return end ; конец программы В случае передачи более длинных фраз (или набора слов), программу можно упростить, создав таблицу в которой символы из фразы будут следовать друг за другом, а обращение к таблице будет организовано из счетчика. Start ; организация счетчика передаваемых символов movlw .6 ; всего 5 символов +1 movwf Reg_4 ; 6 => Reg_4 ; организация передачи из таблицы m4 movf Reg_4,W ; Reg_4 => W call TABLE ; уход в таблицу movwf Reg_3 ; символ из таблицы W => Reg_3 call Tx ; уход в передачу decfsz Reg_4,F ; уменьшаем (Reg_4)-1 goto m4 ; зацикливание goto Start TABLE addwf PC,F ; Содержимое счетчика команд PC = PC + W nop ; для корректировки retlw " " retlw "!" retlw "А" retlw "Р" retlw "У" Размер таблицы накладывает некоторые ограничения, которые ранее мы не рассматривали для облегчения восприятия принципа работы. Выход на командные строчки таблицы производится путем принудительного увеличения счетчика команд PC. Этот счетчик команд организован с помощью обычного регистра, который может принять максимальное значение в 255. А теперь представим ситуацию, что перед таблицей находится некоторое количество других командных строк, например 32. Исходя из этого, таблица может содержать не более (255 – 32) = 223 строк, иначе будет переполнение регистра PC, что приведет к неправильному ходу выполнения программы. Это и есть ограничение размера таблицы для вышеуказанного примера. я собрал только вместо схемы на оптопаре использовал микросхему max232. и при передаче в сторону компьютера, передаются вообще непонятные символы. Прикреплённый файл: 52.gif (9.32 KB)
Отправлено: 02.10.2013 20:19
|
|
Технолог
Зарегистрирован:
12.01.2009 7:28 Из: Уфа
Сообщений:
128
|
в заголовке есть ошибки я их исправил
завтра скину оригинал которые я зашил в мк. только вот все равно передача в сторону пк не осуществляется. может кто нибудь объяснить принцип работы и где тут ошибка
Отправлено: 02.10.2013 20:21
|
|
Технолог
Зарегистрирован:
12.01.2009 7:28 Из: Уфа
Сообщений:
128
|
LIST P=PIC16F84A
#include <P16F84A.INC> __CONFIG _HS_OSC & _WDT_ON & _PWRTE_OFF & _CP_OFF W EQU 0 F EQU 1 STATUS EQU 03h PortA EQU 05h TrisA EQU 05h PortB EQU 06h TrisB EQU 06h C EQU 0h Reg_1 EQU 0Ch ; для счетчика паузы 100 мкс Reg_2 EQU 0Dh ; для счетчика битов в байте Reg_3 EQU 0Eh ; для передаваемого символа Reg_4 EQU 0Fh Reg_5 EQU 10h Reg_6 EQU 11h org 0 ; начало программы ; подготовительные моменты Start bsf STATUS,5 ; переход в Банк 1 movlw b'00011101' ; RA0 на выход, остальные на вход movwf TrisA clrf TrisB bcf STATUS,5 ; переход назад в Банк 0 bsf PortA,0 ; установка 1 - "режим ожидания" clrf PortB ; очистка порта ; вставка символа "У" для передачи m3 movlw "У" ; копируем букву У (рус) как символ, который movwf Reg_3 ; пропишется в кодировке ANSI в Reg_4 (hС4) call Tx ; о кодировке ANSI мы поговорим чуть позже movlw "р" movwf Reg_3 call Tx movlw "а" movwf Reg_3 call Tx movlw "!" movwf Reg_3 call Tx movlw " " movwf Reg_3 call Tx ; т.о. отправлено "Ура! ", call Pause2 goto m3 ; 5 символов, в т.ч. пробел ; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс) Tx movlw .9 ; 8+1, т.е + бит C из STATUS movwf Reg_2 bcf STATUS,C ; подготовка стартового бита m1 btfsc STATUS,C goto bit1 goto bit0 bit1 bsf PortA,1 ; передача единицы call Pause goto m2 bit0 bcf PortA,1 ; передача нуля call Pause goto m2 m2 rrf Reg_3,F ; сдвиг вправо для передачи с младшего бита decfsz Reg_2,F goto m1 bsf PORTA,1 ; установка 1 - "режим ожидания" call Pause return ;delay = 95 machine cycles Pause movlw .31 movwf Reg_1 wr decfsz Reg_1, F goto wr nop return ;delay = 1000000 machine cycles Pause2 movlw .173 movwf Reg_4 movlw .19 movwf Reg_5 movlw .6 movwf Reg_6 wr2 decfsz Reg_4, F goto wr2 decfsz Reg_5, F goto wr2 decfsz Reg_6, F goto wr2 return end; ; конец программы
Отправлено: 03.10.2013 16:53
|
|
я алкоголик из Москвы
|
||
Технолог
Зарегистрирован:
12.01.2009 7:28 Из: Уфа
Сообщений:
128
|
вот готовая и записанная в МК программа
Отправлено: 03.10.2013 16:53
|
|
я алкоголик из Москвы
|
||