Отговори на тема  [ 140 мнения ]  Отиди на страница Предишна  1 ... 4, 5, 6, 7, 8, 9, 10  Следваща
новобранец 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Сря Окт 03, 2007 3:39 pm
Мнения: 311
Мнение 
Виж в хедъра за съответния процесор какво е дефинирано за това и след това погледни в дейта шит-а каква работа върши съответния бит.

_________________
In God we trust. All others must submit an X.509 Certificate


Сря Юли 21, 2010 10:00 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
ахам мерси :)

Опитвам се по този асемблерски код да напиша програма на C aма нещо не се получава същият ефект :)

#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

cblock 0x20
Delay1 ; Assign an address to label Delay1
Delay2
Display ; define a variable to hold the diplay
endc

org 0
Start:
bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
movlw 0x10 ; A2D Clock Fosc/8
movwf ADCON1
bcf STATUS,RP0 ; back to Register Page 0

bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0xFF ; we want all Port A pins Analoga
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1

movlw 0x01
movwf ADCON0 ; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module
MainLoop:
nop ; wait 5uS for A2D amp to settle and capacitor to charge.
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
bsf ADCON0,GO ; start conversion
btfss ADCON0,GO ; this bit will change to zero when the conversion is complete
goto $-1

swapf ADRESH,w ; Copy the display to the LEDs
movwf PORTC
goto MainLoop
end

нещо несъм направил както трябва ама немога да разбера кое ако може малко подсказка :)

това е на C

#include <16f690.h>
#DEVICE *=16 ADC=10
#include <stdio.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //Data EEPROM Code Protected
#FUSES NOPROTECT //Code protected from reads
#FUSES NOMCLR //Master Clear pin enabled
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //Reset when brownout detected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A5,rcv=PIN_A4,bits=8)

void main()

{
long value;
set_tris_A(0xff);
set_tris_C(0x00);
setup_adc(ADC_CLOCK_DIV_8);
SETUP_ADC_PORTS(ALL_ANALOG);
set_adc_channel(0);

while(true)
{
delay_us(5);
value=read_adc();
output_C(value);
}

read_adc(ADC_start_only);
sleep();
value=read_adc(ADC_READ_ONLY);
}


Сря Юли 21, 2010 2:44 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Сря Окт 03, 2007 3:39 pm
Мнения: 311
Мнение 
OffTopic: Разбирам от C да минеш на асемблер ... ама при положение, че имаш готов асемблерски код да минаваш на нещо, което в крайна сметка генерира асемблер ... ми е леееко странно ...

_________________
In God we trust. All others must submit an X.509 Certificate


Сря Юли 21, 2010 3:13 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
ми просто искам да вида на C kak стават горе долу нещата иначе аз още съм много в началото на всичко :) :) но просто за пробата исках дад видя тея примери дето ги имам за starter kit-a на С как ще изглеждат :)

иначе смисъл няма да ;) хаха


Сря Юли 21, 2010 3:39 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
В по - горния пост съм постнал 2 кода един на асм и един на С. Ситуацията е следната през един потенциометър подавам на RA0(AN0) напрежение от 0 до към 4 и нещо 5В на изходите RC има вързани 4 диода. Когато използвам асм код при завъртане на потенциометъра от едното карайно положение (0 V) до другото(около 4(5) V) на изхода С се получава при 0 0000 и при макс напр. което се подава 1101. Когато ползвам програмата която се опитах да напиша на С да прави същото ефектът не е същия за един оборот на потенциометъра (изменение от 0V до макс около 4/5 V) на изхода С се получава следното минава се веднъж от 0000 до 1111 след това се нулира после пак така 0000 до 1111 след което при макс напрежение на AN0 се получава 0100. 1000% съм направил някаква малоумна грешка но ако някой може да помогне ще съм много благодарен. Дано все пак някой разбере и какво съм се опитал да обесня по горе :)


Пет Юли 23, 2010 8:28 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Не съм ти гледал кода, ама това дето го казваш ми мяза на като че ли АЦП-то ти е дясно подравнено и ти ползваш младшия байт. Настрой го ляво подравнено и ползвай старшия байт като резултат(PORTC=ADRESH). Така младшите два бита си отиват в небитието а старшите 8 няма как да се "превъртят".


Пет Юли 23, 2010 9:38 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 24, 2010 11:34 pm
Мнения: 1
Мнение 
ахам мерси то в асм код е направено това обаче на С незнам как да го направя. Трябва бита ADMF в ADCON0 да се нулира. Обаче нещо не ми стана ясно как в С да се обръщам към съдържанието на даден регистър примерно как да нулирам този бит в ADCON0.


Съб Юли 24, 2010 10:34 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
REG &= 0xFE; //нулира бит 0, не засяга останалите
REG &= 0x01; //нулира битове 7:1, не засяга бит 0
REG |= 0xFE; //сет-ва битове 7:1, не засяга бит 0
REG |= 0x01; //сет-ва бит 0, не засяга останалите

разбира се ако REG позволява потребителят да променя нещо по регисъра :)


Съб Юли 24, 2010 10:41 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
дава ми грешка: Undefined identifier ADCON.

OffTopic:горният пост от tupan това пак съм аз , но нещо преди неможех да си влеза в акаунта и си направих нов, после пък успях и сага съм с 2 акаунта към кой трябва да се обърна за да махна единия(tupan) ?


Съб Юли 24, 2010 12:49 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
#include <16f690.h>
#DEVICE *=16 ADC=10
#include <stdio.h>
#include <stdlib.h>
#byte adresh = 0x1e
#byte adcon0 = 1f
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //Data EEPROM Code Protected
#FUSES NOPROTECT //Code protected from reads
#FUSES NOMCLR //Master Clear pin enabled
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //Reset when brownout detected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A5,rcv=PIN_A4,bits=8)

void main()

{
long value;
set_tris_A(0xff);
set_tris_C(0x00);
setup_adc(ADC_CLOCK_DIV_8);
SETUP_ADC_PORTS(ALL_ANALOG);
set_adc_channel(0);
bit_clear(ADCON0,7);
while(true)
{
delay_us(5);
value=read_adc();
swap(value);
output_C(value);
}

read_adc(ADC_start_only);
sleep();
value=read_adc(ADC_READ_ONLY);
}

ляво дясно както и да го подравня се си превърта :) сигурно има и нещо друо :)


Нед Юли 25, 2010 12:31 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пет Юни 25, 2010 3:18 pm
Мнения: 363
Местоположение: Varna
Мнение 
Здравейте,
Относно кода на zle
- не ми е ясно какво ще направи swap(value) - value е от тип long а swap() очаква int8. Предполагам че ще swap-не само младшата част.
- output_C(value); ще изведе на порт С младшите 8 бита на 16 битовата value.
- при 5 us не са ли му малко на adc-то при тази тактова честота.

п.п. Може и да греша - нямам голям опит със CCS и PIC.


Нед Юли 25, 2010 9:44 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
То и аз нямам много опит с CCS(и много други неща) точно за това пиша безумия, задавам тъпи въпроси и тн. :)


Пон Юли 26, 2010 12:47 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Мар 11, 2010 12:24 am
Мнения: 92
Мнение 
пореден тъп въпрос. :) Искам с 1 бутон да си превключвам 2 диода при всяко натискане. Обаче в действителност понякога се получава така, че трябва да натисна 3 4 пъти преди да се превключи другия :)


Вто Юли 27, 2010 1:31 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
zle написа:
пореден тъп въпрос. :) Искам с 1 бутон да си превключвам 2 диода при всяко натискане. Обаче в действителност понякога се получава така, че трябва да натисна 3 4 пъти преди да се превключи другия :)

Дай още малко информация де, няма да ти откраднем патента ;)
Това с контролерче или с друга схема?

_________________
Хайде де!


Вто Юли 27, 2010 11:06 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
dan написа:
Дай още малко информация де, няма да ти откраднем патента ;)

как, бре?! аз само го дебна да изтърве малко информация за това чудо и съм го патентовал като грък българско саламурено сирене!
zle, ако искаш помощ - обяснявай какво имаш предвид, не да подхвърляш по някаква недомлъвка полу-въпрос, полу-нищо , пък ако само си чешеш пръстите по клавиатурата - е, това е друга тема...


Вто Юли 27, 2010 11:23 am
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 140 мнения ]  Отиди на страница Предишна  1 ... 4, 5, 6, 7, 8, 9, 10  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни