Sida 3 av 5
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 10:43:42
av kvaark
Hittade detta
http://www.gooligum.com.au/tut_baseline_C.html
så nu har jag blinkat en led med koden skriven i C
och förstod till och med vad jag gjorde
känner mig faktiskt klokare nu så jag kommer kunna hänga med bättre i trådarna här på ef...
Men jag behöver läsa på betydligt mer innan jag kommer gå över till C helt..
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 11:05:12
av adent
Vissa grejjer är ju lite jobbigare i C tyvärr, men man vänjer sig.
eller:
¨
Är i regel mycket lättare att skriva i assembler. All clear:a en bit är ännu meckligare.
¨
Men de flesta beräkningar blir enklare, speciellt när man använder 16-bitars-tal på en 8-bit-MCU.
Skrev detta igår, men glömde posta...
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 11:30:28
av psynoise
Fast ska man ställa enstaka bitar tycker jag det finns all rätt att använda makron för att göra koden mer läsbar. I AVR-libc finns följande som exempel
Kod: Markera allt
#define GLUE(a, b) a##b
#define SET_(what, p, m) GLUE(what, p) |= (1 << (m))
#define CLR_(what, p, m) GLUE(what, p) &= ~(1 << (m))
#define GET_(/* PIN, */ p, m) GLUE(PIN, p) & (1 << (m))
#define SET(what, x) SET_(what, x)
#define CLR(what, x) CLR_(what, x)
#define GET(/* PIN, */ x) GET_(x)
/* Utgång */
#define UT A, 3
/* Ettställa en bit */
SET(PORT, UT);
/* Nollställa en bit */
CLR(PORT, UT);
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 13:09:20
av adent
Jo macrona är bra förstås, men man ska nog ha förstått vad den "egentligen" gör...
Fast i slutändan blir det förhoppningsvis nån form av bit set eller bit clear-maskinkod av
det hela iaf.
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 13:35:34
av sodjan
I MPLAB XC8 gör man t.ex :
Kod: Markera allt
PORTAbits.RA2 = 1;
PORTAbits.RA2 = 0;
if (PORTAbits.RA2 == 1);
för att hantera en enskild bit. Jag vet inte om något
macro skulle göra det så värst mycket tydligare.
Se: "MPLAB XC8 C Compiler User’s Guide":
http://ww1.microchip.com/downloads/en/D ... 52053B.pdf
Kapitel "5.3.6 Using SFRs From C Code" sidan 137.
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 17:50:16
av kvaark
Hur gör man sådana där rutor med kod i här på ef?
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 18:09:12
av SeniorLemuren
Klicka på Code- rutan ovanför skrivarean du får då upp texten: "
". Skriv eller kopiera in din kod mellan code blocken.
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 19:40:04
av sodjan
Så här såg t.ex mitt förra inlägg ut när jag skrev det:
Kod: Markera allt
I MPLAB XC8 gör man t.ex :
[code]
PORTAbits.RA2 = 1;
PORTAbits.RA2 = 0;
if (PORTAbits.RA2 == 1);
för att hantera en enskild bit. Jag vet inte om något
macro skulle göra det så värst mycket tydligare.
Se: "MPLAB XC8 C Compiler User’s Guide":
http://ww1.microchip.com/downloads/en/D ... 52053B.pdf
Kapitel "5.3.6 Using SFRs From C Code" sidan 137.[/code]
Notera de två "code" och "/code" taggarna...
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 7 mars 2013, 19:46:07
av kvaark
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 8 mars 2013, 10:55:43
av kvaark
Ok så jag bestämde mig för att prova något lite mer avancerat än att blinka en led..
Detta va vad jag kom fram till
Kod: Markera allt
#include <xc.h>
#include <stdint.h>
#pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FOSC = INTRCIO, FCMEN = OFF, MCLRE = OFF, WDTE = OFF, CP = OFF, PWRTE = OFF
#define _XTAL_FREQ 8000000
#define LED PORTAbits.RA2
#define RX PORTCbits.RC0
void main()
{
uint8_t count;
uint24_t adress;
uint24_t nyckelon = 4214805;
uint24_t nyckeloff = 4214804;
TRISA = 0b11111011;
TRISC = 0b11111111;
OSCCON = 0b01110001;
ANSEL = 0;
ANSELH = 0;
for (;;)
{
//Vänta på att RX = 0 i 7mS
for (count = 0; count <= 70; count++)
{
__delay_us (100);
if (RX == 1)
count = 0;
}
//läs av in signaler spara i adress
adress = 0;
for (count = 0; count < 24; count++)
{
adress = adress << 1 ;
while (RX == 1)
{
;
}
while (RX == 0)
{
;
}
__delay_us(740);
adress = adress ^ RX;
}
//Gämför adress med nyckel
if (adress == nyckelon)
LED = 1;
if (adress == nyckeloff)
LED = 0;
}
}
Denna kod läser av en NEXA fjärrkontroll och tänder släcker en lysdiod
Om ni vill komma med tips om sådant som ni ser jag kan förbättra så gör gärna det

Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 8 mars 2013, 11:06:20
av sodjan
> __delay_us(740)
Det är sådant som man som nybörjare lätt tar till för att det
är enkelt, men som man ganska snart upptäcker inte fungerar
alls när det börjar bli lite mer funktioner i programmet. Du kommer
att behöva studera bl.a "timers" och "interrupt".
Annars vet jag inte, fungerar det så fungerar det...
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 8 mars 2013, 11:29:16
av kvaark
>Det är sådant som man som nybörjare lätt tar till för att det
är enkelt, men som man ganska snart upptäcker inte fungerar
alls när det börjar bli lite mer funktioner i programmet. Du kommer
att behöva studera bl.a "timers" och "interrupt".
Jo men vist är det onödigt att krångla till saker och ting när det inte behövs..
Interupt är dock svårt då RX signalen är så skräpig när ingen signal sänds..
Men en timer skulle jag kunna använda helt klat
VIDEO:
http://www.youtube.com/watch?v=wvYHNEYu ... e=youtu.be
Detta projekt ska byggas på med en liten vinsch som ska veva ner persiennerna i vardagsrummet när jag slår på tv'n och det är ljust ute
samt hissa upp dom när tv'n stängs av
Inte så avancerat...
Men jag tänkte att det får bli mitt första projekt i C
Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 8 mars 2013, 12:05:24
av sodjan
> Interupt är dock svårt då RX signalen är så skräpig när ingen signal sänds..
Det var en generell kommentar kring programvaru-delayer, jag vet inte
ett smack om det som du försöker göra. Men som sagt, fungerar
det så fungerar det...

Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 8 mars 2013, 12:23:38
av kvaark
>Det var en generell kommentar kring programvaru-delayer,
Ok förklara mer?
Som jag förstår det så är lite vitsen med en timer att man kan göra lite andra saker under tiden man väntar plus att det kanske tar mindre plats i programminnet.

Re: Pratar Assembler. Vill lära mig nytt språk..
Postat: 8 mars 2013, 14:19:57
av sodjan
Exakt!

Därför använder man inte delay-funktioner...