Свежие обсуждения
Микроконтроллеры

pic12F675 + CCS PCWHD + Proteus 7.2 SP2 = проблема с симуляцией

1 2

Приветствую.
Возникла необходимость написать прошивку под pic12F675, и отладить ее в протеусе.
Генератор - внутренний. Проблема в том что симуляция в не работает, генератор не фурычит
MCLR подтянут через 10к. Нашел вроде что константу нужно прописать по адресу 0x03FF , прописал туда 343C, не помогло.
Может кто сталкивался, подскажите как запустить этот триплет.

Вот тестовый код:
#include <12F675.h>
#device adc=8
#use delay(clock=4000000)
#fuses INTRC,PUT,NOWDT

void main()
{
setup_comparator( NC_NC_NC_NC ); // disable comparators
setup_adc_ports( NO_ANALOGS ); // disable analog inputs
setup_adc( ADC_OFF ); // disable A2D
while (0)
{
output_high(PIN_A0);
delay_us(10);
output_low(PIN_A0);
}
}

 

А если вместо while (0) попробовать написать while (1) будет работать?

 

ivasi Наверное нужно добавить настройку TRISIO b'00001000', ведь после сброса МК порты I/O переведены на вход.
Или команда "output_high/low" автоматом настраивает указанный пин на вывод?

 

Digital, нет по дефолту boolean = false

 

AlexAlcoa, не помогло
Камень получается вообще не живой в эмуляторе.
Дебагер даже в main() не заходит.
у меня фьюз INTRC прописан, значит должны быть часы на clockout. Их нет.

 

Модель PIC12675 в проте работает замечательно, правда я использую asm. Протеусу все равно какой фьюз на генераторе, частота тактирования задается в настройках МК, надеюсь путь к хексу в настройках указан? Какие сообщения выдает прот?
Может попробовать не в связке MPLAB+CCS+Proteus, а сгенерить хекс и скормить его проту?

 

Вот шот из протеуса, а вод дезассемблированная прошивка.
В ассемблере не силен :-\, поэтому пишу на С

--- C:\pic_projects\pll_transmitter\main.c -----------------------------------------------------
1: #include <12F675.h>
000 3000 MOVLW 0
001 008A MOVWF 0xa
002 2804 GOTO 0x4
003 0000 NOP
004 23FF CALL 0x3ff
005 1683 BSF 0x3, 0x5
006 0090 MOVWF 0x10
007 3000 MOVLW 0
008 008A MOVWF 0xa
009 280A GOTO 0xa
2: #device adc=8
3: #use delay(clock=4000000)
4: #fuses INTRC,PUT,NOWDT
5:
6: void main()
7: {
00A 0184 CLRF 0x4
00B 301F MOVLW 0x1f
00C 0583 ANDWF 0x3, F
00D 131F BCF 0x1f, 0x6
00E 1683 BSF 0x3, 0x5
00F 101F BCF 0x1f, 0
010 109F BCF 0x1f, 0x1
011 111F BCF 0x1f, 0x2
012 119F BCF 0x1f, 0x3
013 3007 MOVLW 0x7
014 1283 BCF 0x3, 0x5
015 0099 MOVWF 0x19
8: setup_comparator( NC_NC_NC_NC ); // disable comparators
016 3007 MOVLW 0x7
017 0099 MOVWF 0x19
018 1683 BSF 0x3, 0x5
019 0805 MOVF 0x5, W
01A 3003 MOVLW 0x3
01B 1283 BCF 0x3, 0x5
01C 00A0 MOVWF 0x20
01D 0BA0 DECFSZ 0x20, F
01E 281D GOTO 0x1d
01F 0819 MOVF 0x19, W
020 118C BCF 0xc, 0x3
9: setup_adc_ports( NO_ANALOGS ); // disable analog inputs
021 131F BCF 0x1f, 0x6
022 1683 BSF 0x3, 0x5
023 101F BCF 0x1f, 0
024 109F BCF 0x1f, 0x1
025 111F BCF 0x1f, 0x2
026 119F BCF 0x1f, 0x3
10: setup_adc( ADC_OFF ); // disable A2D
027 1283 BCF 0x3, 0x5
028 101F BCF 0x1f, 0
11: set_tris_a(0x8);
029 3008 MOVLW 0x8
02A 1683 BSF 0x3, 0x5
02B 0085 MOVWF 0x5
12: while (0)
13: {
14: output_high(PIN_A0);
15: delay_us(10);
16: output_low(PIN_A0);
17: }
02C 0063 SLEEP

 

А почему CCS не сгенерил код для while (0) {...}. Может какая проблема с компилятором? Лицензия для PIC12F?

 

Вроде разобрался.
AlexAlcoa, спасибо за наводку!
Действительно не генерился код. Но не из за лицензии.
Заработало когда переписал код в таком виде(см ниже)
Но вот клоков с внутреннего генератора на ClockOut (3я нога) так и нет. Как можно вывести внутренний генератор наружу?

#include <12F675.h>
#device adc=8
#use delay(clock=4000000)
#fuses INTRC,PUT,NOWDT

int1 key;

void main()
{
setup_comparator( NC_NC_NC_NC ); // disable comparators
setup_adc_ports( NO_ANALOGS ); // disable analog inputs
setup_adc( ADC_OFF ); // disable A2D
set_tris_a(0x8);
key = false;
while (!key)
{
output_high(PIN_A0);
delay_us(10);
output_low(PIN_A0);
}
}

 

ivasi: Посмотрите тут: http://pro-radio.ru/controllers/3131-2/#2007/02/01/19-35-14