4.0 volt? What does the SIM card spec say?
What's the value of the resistors?
Why do You need double line spacing in the code? It makes the view being half the number of lines.
I apologize for the double lines. i'll fix them right away.
As for the resistores their values are 10k and 20k
According to the SIM800l Datasheet
The module can be powered with Power supply of 3.4V ~4.4V
and The SIM interface is powered from an internal regulator in the module.
You copy every character coming in Serial.read out to software serial.
Add some Serial.print telling exactly what characters are transfered. I suspect Cr and/or Lf might be passing, and maybe ruin the AT comand syntax.
Your code uses Serial.read for the data into the controller. Are You sending those characters from serial monitor in the IDE? That was my assumption... Then a Serial.print can be used to print the hexadecimal representation of the characters handled.
A program like RealTerm or TeraTerm (to name but two) - or even the Arduino IDE's Serial Monitor - which lets you send & receive characters over a serial interface (a "COM port" on Windows; "/dev/tty" on Linux).
Characters you type at the keyboard are sent to the serial interface; characters received from the serial port are displayed on the screen.
This allows you to manually interact with any serial device.
ADDENDUM
Sometimes also called a "Terminal Emulator" - because it emulates the behaviour of the old, dedicated serial terminals: