Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.10.2010, 19:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Да, так написано в документации, но если почитать, то оказывается, что предоставляется программный выбор из указанного выше ряда коэффициентов деления. Мне нужен 245, тогда всё пошло бы. Там есть 256, получается 9,6 вместо 8 кГц. Я остановился на 8кГц, как на стандарте всяких вокодеров.
|
Я так понял, Вы по коэффициентам для прескалера/постскалера таймера решили. Но основной регистр TMRx, с его помощью и получается коэффициент деления, необходимый для получения нужной частоты прерываний.
|
|
|
|
16.10.2010, 19:51
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от AJScorp
|
Имхо под 12-е пики ASM наше всё. Там просто негде развернуться Си, про бейсик не знаю - не пользовался им лет 20 точно.
|
На асме там вполне красиво выходит:
Цитата:
|
;Address Opcode ASM
0x0000 0x2819 GOTO 25
8khz_interrupt:
0x0004 0x00FF MOVWF R15
0x0005 0x0E03 SWAPF STATUS, 0
0x0006 0x0183 CLRF STATUS
0x0007 0x00C2 MOVWF ___saveSTATUS
0x0008 0x080A MOVF PCLATH, 0
0x0009 0x00C3 MOVWF ___savePCLATH
0x000A 0x018A CLRF PCLATH
;8khz.mbas,2 :: sub procedure interrupt
;8khz.mbas,3 :: pir1.TMR1IF=0
0x000B 0x100C BCF PIR1, 0
;8khz.mbas,4 :: tmr1h=0xff
0x000C 0x30FF MOVLW 255
0x000D 0x008F MOVWF TMR1H
;8khz.mbas,5 :: tmr1l=146
0x000E 0x3092 MOVLW 146
0x000F 0x008E MOVWF TMR1L
;8khz.mbas,6 :: gpio.5=not gpio.5
0x0010 0x3020 MOVLW 32
0x0011 0x0685 XORWF GPIO, 1
L_8khz_interrupt2:
0x0012 0x0843 MOVF ___savePCLATH, 0
0x0013 0x008A MOVWF PCLATH
0x0014 0x0E42 SWAPF ___saveSTATUS, 0
0x0015 0x0083 MOVWF STATUS
0x0016 0x0EFF SWAPF R15, 1
0x0017 0x0E7F SWAPF R15, 0
0x0018 0x0009 RETFIE
; end of 8khz_interrupt
_main:
;8khz.mbas,8 :: main:
;8khz.mbas,9 :: trisio.5=0
0x0019 0x1683 BSF STATUS, 5
0x001A 0x1285 BCF TRISIO, 5
;8khz.mbas,10 :: t1con=%00000001
0x001B 0x3001 MOVLW 1
0x001C 0x1283 BCF STATUS, 5
0x001D 0x0090 MOVWF T1CON
;8khz.mbas,11 :: intcon.gie=1
0x001E 0x178B BSF INTCON, 7
;8khz.mbas,12 :: intcon.peie=1
0x001F 0x170B BSF INTCON, 6
;8khz.mbas,13 :: pie1.tmr1ie=1
0x0020 0x1683 BSF STATUS, 5
0x0021 0x140C BSF PIE1, 0
0x0022 0x2822 GOTO $+0
; end of _main
|
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
16.10.2010, 20:03
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от AJScorp
|
Имхо под 12-е пики ASM наше всё.
|
Так нет же вроде у него предустановки числа в таймере, чаво тогда и разворачиваться. Пусть живёт. Буду рыть область 16-х. Может что найду.
|
|
|
|
16.10.2010, 20:17
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от Easyrider83
|
На асме там вполне красиво выходит:
|
Hi-tech PIC C тоже выглядит не хуже ![Мистер Грин](images/smilies/icon_smilegreen.gif) :
Код:
|
static void interrupt ISR(void)
{
TMR1IF = 0;
TMR1H = 0xFF;
TMR1L = 146;
GP5 = !GP5;
}
int main(void)
{
TRISIO5 = 0;
T1CON = 0x01;
GIE = 1;
PEIE = 1;
TMR1IE = 1;
while(1);
} |
Код:
|
5 004 00FF MOVWF 0x7f
6 005 0803 MOVF STATUS, W
7 006 0183 CLRF STATUS
8 007 00C0 MOVWF 0x40
9 008 1283 ISR BCF STATUS, 0x5
10 009 100C BCF PIR1, 0
11 00A 30FF MOVLW 0xff
12 00B 008F MOVWF TMR1H
13 00C 3092 MOVLW 0x92
14 00D 008E MOVWF TMR1
15 00E 3020 MOVLW 0x20
16 00F 0685 XORWF GPIO, F
17 010 1283 BCF STATUS, 0x5
18 011 0840 MOVF 0x40, W
19 012 0083 MOVWF STATUS
20 013 0EFF SWAPF 0x7f, F
21 014 0E7F SWAPF 0x7f, W
22 015 0009 RETFIE
23 016 2817 GOTO 0x17
24 017 1683 BSF STATUS, 0x5
25 018 1285 BCF GPIO, 0x5
26 019 1283 BCF STATUS, 0x5
27 01A 0190 CLRF T1CON
28 01B 0A90 INCF T1CON, F
29 01C 178B BSF INTCON, 0x7
30 01D 170B BSF INTCON, 0x6
31 01E 1683 BSF STATUS, 0x5
32 01F 140C BSF PIR1, 0
33 020 2820 GOTO 0x20 |
|
|
|
|
16.10.2010, 20:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от Easyrider83
|
На асме там вполне красиво выходит:
|
Согласен, вполне красиво.
У любого языка высокого уровня есть один недостаток - он генерит код САМ.
Никакого холивара, сам пишу на СИ под пики и очень доволен - быстро и качественно, но не под такую мелочь. В качестве примера была задача сделать modbus-slave на 675м пике. Перестраиваемая скорость связи 19200 - 230400, текстовое меню настроек по пользовательской функции. Все выверялось буквально по тактам процессора, с трудом, но влезло, осталось байт пять свободных. ![Горд собой](images/smilies/icon_dovl.gif) Очень не думаю, что смог бы это реализовать не чём-то кроме асма.
|
|
|
|
16.10.2010, 20:21
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Парни! Вы просто гении оба! Раз и готово, одной левой! Пока я кобеля посрать водил вы такое сочинили, ВИВАТ!!!
|
|
|
|
16.10.2010, 20:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Так нет же вроде у него предустановки числа в таймере
|
Как так? В TMRx записываете число, оно увеличивается с частотой, заданной прескалерами, и как только достигнет нуля - вызывается прерывание!
|
|
|
|
16.10.2010, 20:25
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от AJScorp
|
Как так? В TMRx записываете число
|
Не надо меня интриговать, я и так невысокого мнения о своих нынешних умственных способностях.. В 16 х такая возможность есть, только что смотрел мануал, а в 12-х не видел.
|
|
|
|
16.10.2010, 20:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
а в 12-х не видел.
|
Дык вот же парни уже накатали в примерах
Сообщение от realid
|
static void interrupt ISR(void)
{
TMR1IF = 0;
TMR1H = 0xFF;
TMR1L = 146;
GP5 = !GP5;
}
|
|
|
|
|
16.10.2010, 20:28
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Вопросы от NikMih_1
Да писать можно в любой таймер. На 18ых пиках иногда нужен бубен. Я там с ним шаманил, но пару раз было такое, что мандража не наступало, таймер раскуриваться не хотел и я шел в обход, злобно матерясь и вспоминая проклятых большевиков.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:54.
|
|